2014-02-24 72 views
0

我有一個多節點複雜的JSON:解析複雜的Json Java的多功能使用節點

{ 
    "List": { 
    "Summary": { 
     "0": { 
     "Id": 163375, 
     "city" : "Paris" 

    }, 
     "1": { 
     "Id": 15541, 
     "city" : "London" 

    }, 
     "2": { 
     "Id": 18459, 
     "city" : "Berlin" 

    } 
    } 
    } 
} 

我需要Id和市各節點0,1,2 ...

  1. 如何我可以解析我想要的信息嗎? (第三節點...)。

  2. 我該如何迭代? (有時,我可以有25個或更多的節點,我的意思是0到25)。

在此先感謝您的幫助!

P.

+0

你說得對,剛纔編輯的權利JSON。謝謝 – user3346327

回答

0

您可以使用傑克遜對於其JsonNode

final ObjectMapper mapper = new ObjectMapper(); 
final JsonNode input = mapper.readTree(yourSourceHere); 

Map.Entry<String, JsonNode> entry; 

final Iterator<Map.Entry<String, JsonNode>> iterator 
    = input.get("List").get("Summary").fields(); 

while (iterator.hasNext()) { 
    entry = iterator.next(); 
    // work with entry 
} 

但是請注意:對象的成員順序沒有JSON(參見RFC 4627)顯著。奇怪的是內部對象不是以數組形式存儲的(因爲數組元素順序重要)。

即:{"0": null, "1": null}{"1": null, "0": null}是相同的對象,但[0, 1][1, 0]不是相同的數組。

傑克遜將按照外觀順序閱讀,但這是一個「事故」。不要依賴它。

+0

謝謝!其實這是Expedia API的JSON結構。 – user3346327

+0

嘿,你應該把問題指向他們;)有一個鏈接到文檔? – fge

+0

http://developer.ean.com/apitester/ – user3346327

1

嘗試:

org.json.JSONObject json = new JSONObject("Place your JSON here"); 
json = json.getJSONObject("List").getJSONObject("Summary").getJSONObject("2"); 
System.out.println(json.toString()); 

這隻能如果你知道你的ID所需的對象有作品。

的Maven的依賴性的JSONObject:

<dependency> 
    <groupId>org.json</groupId> 
    <artifactId>json</artifactId> 
    <version>20140107</version> 
</dependency> 
+0

謝謝!它運作良好 – user3346327