2017-06-20 318 views
1

我想知道有沒有人知道是否有可能迭代通過這個JSON模型的N個級別,如果是的話如何?我在JAVA中這樣做,我可以訪問Gson庫。如何遍歷JSONObject的N個層次?

{ 
    "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)); 

然而,只有迭代級別,我無法找到一種方法來調整代碼來遍歷多個級別或提出另一個解決方案。

+4

它當然可能,你怎麼嘗試過什麼呢?如果是的話,你可以添加你的代碼 – nafas

+1

你將如何遍歷地圖等地圖的地圖,而不知道嵌套有多深?這個答案與你如何使用json對象類似。 – Thomas

+1

所有你需要做的是循環,而你的對象有一個貓變量,然後你設置object = object.cat。 (< - 不是代碼) –

回答

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"); 
    }