zoukankan      html  css  js  c++  java
  • 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();  

  • 相关阅读:
    2.0 C++远征:隐藏
    1.0 C++远征:为什么继承
    15.0 C++远征:常指针和常引用
    14.0 C++远征:常对象成员和常成员函数
    13.0 C++远征:this指针
    12.0 C++远征:对象成员指针
    Sql语句
    斐波那契 递归 求某一个数
    WebAPI 和 WebService的区别
    获取用户IP
  • 原文地址:https://www.cnblogs.com/rongyux/p/5527638.html
Copyright © 2011-2022 走看看