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

 

posted @ 2016-05-25 16:49  rongyux  阅读(2251)  评论(0编辑  收藏  举报