解析三层嵌套JSON的最简单方法?

时间:2019-07-14 00:48:20

标签: java json parsing

我得到了一个将以以下格式显示的JSON:

   "template":{  
      "mod1":[  
         {  
            "param1":"55",
            "param2":"5",
            "param3":"somedata"
         }
      ],
      "mod2":[  
         {  
            "param1":"somedata",
            "param2":"somedata"
         }
      ],
      "mod3":[  
         {  
            "param1":"somedata",
            "param2":"somedata",
            "param3":"somedata"
         }
      ],
      "mod4":[  
         {  
            "param1":"somedata",
            "param2":"somedata"
         }
      ],
      "mod5":[  
         {  
            "param1":"somedata"
         }
      ]
   }
}

解析它的最简单方法是什么?我想要的是将mod中的参数及其关联的值放在一起,以存储到数据库中。我这样做的方式是这样的:

        JSONObject obj = new JSONObject(json);
    System.out.println(obj);
    Iterator<String> keys = obj.keys();
    while(keys.hasNext()) {
        String key = keys.next();
        JSONObject currTemplate = (JSONObject) obj.get(key);
        if(currTemplate instanceof JSONObject) {
            System.out.println("LIST OF ALL MODULES : " + currTemplate);
            Iterator<String> currObjKeys = ((JSONObject) currTemplate).keys();
            while(currObjKeys.hasNext()) {
                String currObjKey = currObjKeys.next();
                System.out.println("MODULE: " + currObjKey);
                JSONArray array = currTemplate.getJSONArray(currObjKey);
                System.out.println("ARRAY: " + array);
                for(int i = 0; i < array.length(); i++){
                JSONObject object = array.getJSONObject(i);
                String[] names = JSONObject.getNames(object);
                for(String name: names) {
                    System.out.println("PARAMS");
                    System.out.println(name);
                    System.out.println(object.get(name));
                }
                }
            }
        }

它当前可以正确打印我需要的内容。我想问的是,是否有一种更有效的方法可以做到这一点-我目前拥有的方法是O(N ^ 4),我想知道是否有人想以更有效的方式解析JSON。注意:params并不总是采用param1,param2的形式,名称总是不同的。只是出于保密目的对其进行了更改。

谢谢。

0 个答案:

没有答案