解决解析时出现错误 com.alibaba.fastjson.JSONException: expect ':' at 0, actual =
·
问题:
JSONObject propertyData = deviceMongoModel.getData();
String powerStr = propertyData.getString("power");
JSONObject powerObject = JSONObject.parseObject(powerStr);
在解析第三行代码时出现com.alibaba.fastjson.JSONException: expect ':' at 0, actual = 错误
解决方法:
JSONObject propertyData = deviceMongoModel.getData();
JSONObject powerObject = propertyData.getJSONObject("power");
用JOSNObject.getJSONObject(" ")方法而不是JSONObjet.paseObject(JSONObject.getString(" "))
原因:
虽然代码里面的propertyDate打印出来是JSONObject格式
{
"voltageBC":{
"value":"237.5",
"updateTime":1588836164467
},
"power":{
"value":"0.0",
"updateTime":1588836164467
},
"energy":{
"value":"0.161",
"updateTime":1588835401112
}
}
用getString("power")出来是
{value=0.0, updateTime=1588838162449}
而非是JSONObject格式,所以转换出错。
debug走看一下是因为代码propertyDate里面的存储的是Map格式,如果是JSONObject就不会出现这个问题,如果是Map取得时候需要用getJSONObject(" ")来获取,而不是JSONObjet.paseObject(JSONObject.getString(" "))
getJSONObject()可以处理map里面的entry的值,重要部分源码如下:
if (javaObject instanceof Map) {
Map<Object, Object> map = (Map<Object, Object>) javaObject;
int size = map.size();
Map innerMap;
if (map instanceof LinkedHashMap) {
innerMap = new LinkedHashMap(size);
} else if (map instanceof TreeMap) {
innerMap = new TreeMap();
} else {
innerMap = new HashMap(size);
}
JSONObject json = new JSONObject(innerMap);
for (Map.Entry<Object, Object> entry : map.entrySet()) {
Object key = entry.getKey();
String jsonKey = TypeUtils.castToString(key);
Object jsonValue = toJSON(entry.getValue());
json.put(jsonKey, jsonValue);
}
return json;
}
更多推荐
已为社区贡献2条内容
所有评论(0)