2013-05-17 288 views
0

我有被讀取並存儲在String稱爲jsonString這個JSON文件,它看起來像這樣:解析JSON字符串

{ 
    "position":1, 
    "team_id":10260, 
    "home": 
    { 
    "played":18, 
    }, 
}, 
{ 
    "position":2, 
    "team_id":8456, 
    "home": 
    { 
    "played":12, 
    }, 
}, 

代碼解析:

JSONObject obj = new JSONObject(jsonString); 
Iterator it = obj.keys(); 

    while(it.hasNext()){ 
     String s = it.next().toString(); 
     System.out.print(s + " " + obj.getString(s) + " "); 
    } 

輸出是:position 1 home {"played":18} team_id 10260

所以它不讀取文件的其餘部分。你能告訴我有什麼問題嗎?而且,爲什麼home {"played":18}team_id 10260之前打印?

回答

4

如果你看看括號的組織方式,你可以看到你的String實際上包含了幾個JSON對象,並且在第一個完整對象之後停止構造。

關於你的第二個問題,Iterator小號很少有保證的順序,所以你不能做哪些責令元素將被退回任何假設。

+0

那麼我怎樣才能移動到下一個'JSON'對象呢? – Sam

+1

您應該確保輸入遵循'JSON'標準格式。如何做到這一點取決於你在哪裏獲得你的indata。它看起來像你所擁有的是一個數組,在這種情況下,你需要在數據的末尾添加一個'['到開始和']'。 – Keppil

+0

它實際上有'[]',但引發了一個異常:'Syntax error,insert「}」來完成Block',所以我刪除了它們。我想我明白了。謝謝。 – Sam

2

的順序將是依賴於Map類型JSONObject使用;可能是不確定的,或者可能是按鍵的代碼點,或者可能是爲了讀取,這取決於,例如, HashMap,TreeMapLinkedHashMap

除此之外,還有兩個對象被序列化,JSONObject顯然剛剛在第一個對象後面停止。您可能需要將整個輸入包裝在一組{}中。