JSON:JSON對象和JSON數組混排的復雜字符串


  在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();  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM