在java中的一個好用的JSON工具包:net.sf.json.JSONObject 和 net.sf.json.JSONArray
一 解析JSON對象和JSON數組類型混排的復雜字符串
舉個例子:
要求把demo中的json字符串,解析得到需要的變量(主要任務,區別解析JSON對象和JSON數組類型):
{ "ThroughPut": { "1461546080": [ 3.9986060825147764, 101.18750156787883, -93.19028940284933 ], "1461546140": [ 10.504168194991284, 79.32800580482753, -58.31966941484501 ], "1461546200": [ 9.666977655396506, 65.97470645709711, -46.64075114630414 ] }, "ActiveThreadsNum": { "1461546080": [ 18.99998334015418, 23.9064418688091, 14.093524811499258 ], "1461546140": [ 18.49632839078893, 22.00327709020313, 14.989379691374722 ], "1461546200": [ 20.37540941538413, 23.282270617546928, 17.46854821322133 ]
} }
方案:
1解析JSON對象:strRead是上面的字符串demo,首先解析成JSONObject對象;
net.sf.json.JSONObject json_Arr = net.sf.json.JSONObject.fromObject(strRead);
2遍歷JSONObject對象的所有key值,目的是取對應的value;
例如, 上面的demo:
(1)關鍵字:ThroughPut ;
值:{ "1461546080": [ 18.99998334015418, 23.9064418688091, 14.093524811499258 ], "1461546140": [ 18.49632839078893, 22.00327709020313, 14.989379691374722 ], "1461546200": [ 20.37540941538413, 23.282270617546928, 17.46854821322133 ]};
(2)由於value又是一個JSONObject,繼續net.sf.json.JSONObject.fromObject(jsonObjStr),解析成JSONObject對象;
關鍵字:"1461546080":
值:[ 18.99998334015418, 23.9064418688091, 14.093524811499258 ]
for (Object key1 : json_Arr.keySet()) { String jsonObjStr = json_Arr.get(key1).toString(); net.sf.json.JSONObject jsonObject = net.sf.json.JSONObject.fromObject(jsonObjStr);
3發現上面的值又是一個JSONArray類型,所以需要解析JSONArray;
net.sf.json.JSONArray jsonArr = net.sf.json.JSONArray.fromObject(tmp.toString());將輸入的字符串[ 18.99998334015418, 23.9064418688091, 14.093524811499258 ]解析成JSONArray;
JSONArray是必須以[開頭的字符串。
jsonArr.getDouble(1)得到第一個浮點型數值18.99998334015418
jsonArr.getDouble(2)得到第二個浮點型數值23.9064418688091
for(Object k : jsonObject.keySet()){ Object tmp = jsonObject.get(k); net.sf.json.JSONArray jsonArr = net.sf.json.JSONArray.fromObject(tmp.toString()); Double jsonMax = jsonArr.getDouble(1);
總結:主要就成功解析了這個復雜的混排字符串:利用這個好用的json工具包net.sf.json;注意有區別的解析array和object類型json;
一般步驟:
第一步:字符串解析成變量:
json = fromObject(str)
第二步:遍歷解析的變量:key -> value 類型
for (Object key1 : json.keySet()) { String jsonObjStr = json.get(key1).toString(); }