1. 程式人生 > >一個冷門json類JacksonJsonParser中的坑

一個冷門json類JacksonJsonParser中的坑

JacksonJsonParser是spring boot裡面的一個json類,他能夠解析json資料,一開始發現spring boot中有json解析很高興,不用再去引入依賴,結果使用的時候才發現一個大坑。那就是解析複雜的巢狀json會導致引號丟失。

public Object jsonUtil(String json,String key) {
		JacksonJsonParser jacksonJsonParser = new JacksonJsonParser();
		Map<String,Object> map = jacksonJsonParser.parseMap(json);
		for(String keyString:map.keySet()) {
			if (keyString.equals(key)) {
				return map.get(key);
			}
		}
		return null;
	}

傳入json和自己所需要的value的key返回value

當傳入的json是正確的json資料返回的是一個‘假’的json,為什麼說是假的呢,因為所有的引號都丟失了

{"did":"856018102A180006","measureData":{"roll":{"receivedDate":1554275432618,"value":"0.0","eventDate":1554275409000},"pitch":{"receivedDate":1554275432618,"value":"0.0","eventDate":1554275409000},"yaw":{"receivedDate":1554275432618,"value":"0.0","eventDate":1554275409000},"voltage":{"receivedDate":1554275432618,"value":"0.0","eventDate":1554275409000}},"alertData":{"anglechange":{"msg":"angle change","level":"Error","source":"Device","receivedDate":1554877853352,"eventDate":1554849068000},"type":"Alert"},"msgID":0}

我要獲取alertData的內容

{anglechange={msg=angle change, level=Error, source=Device, receivedDate=1554881337850, eventDate=1554852553000}, type=Alert}

這就導致了當我想再獲取剩下巢狀的value的時候,key