如何迭代JSONObject的N级?

时间:2017-06-20 14:25:49

标签: java json gson

我想知道是否有人知道是否可以迭代这个JSON模型的N级,如果是这样的话怎么样?我在JAVA中这样做,我可以访问Gson库。

{
    "description": "Name of the level",
    "value": "Name of the value",
    "cat": {
        "description":"Name of the level",
        "value": "Name of the value",
        "cat": {
            "description":"Name of the level",
            "value": "Name of the value",
            "cat": {                
                "description":"Name of the level",
                "value": "Name of the value",
                "cat" : {
                    "description":"Name of the level",
                    "value": "Name of the value",
                    "cat": null
                    }
                }           
            }
        }
    }

我想要做的是能够通过这个JSON并检索每个级别的“描述”和“值”,而不知道有多少级别。在某些情况下,可能只有2个级别,而其他时候可能有多达10个级别。

我在JAVA中试过这种方法:

Map<String, Object> map = gson.fromJson(jsonGeneric, new  TypeToken<Map<String, Object>>() {}.getType());
map.forEach((x, y) -> System.out.println("key : " + x + " , value : " + y));

然而,这只是在第一级迭代,我无法找到一种方法来调整代码以迭代多个级别或提出另一种解决方案。

1 个答案:

答案 0 :(得分:1)

感谢Carl Shiles的评论,这让我走上正轨。所以我正在寻找的最终代码如下:

  JsonParser jsonParser = new JsonParser();
    JsonElement jo = jsonParser.parse(jsonGeneric);
    while (!jo.isJsonNull()) {
        System.out.println(jo.getAsJsonObject().get("description").getAsString());
        System.out.println(jo.getAsJsonObject().get("value").getAsString());
        jo = jo.getAsJsonObject().get("cat");
    }