2015-09-23 29 views
1

JSONArray有問題。我的JSONArray適用於API 22,但不適用於API小於22的設備。 當我更改我的編譯SDK時,出現大量錯誤。 有沒有解決這個奇怪的行爲。我無法解釋它... 這是JSON:針對不同API版本的JSONArray奇怪行爲

{"2":"[{\"id\":\"3\",\"value\":\"1.15\",\"name\":\"Knobi\"}, Dressing]","1":"[{\"id\":\"1\",\"value\":\"0.00\",\"name\":\"Scharf\"}, Soße, {\"id\":\"2\",\"value\":\"1.00\",\"name\":\"Tzatziki\"}, Soße]"} 

if(addonsJSON != null) 
{ 
    Iterator<String> iterator = addonsJSON.keys(); 
    while (iterator.hasNext()) 
    { 
     String theKey = iterator.next(); 
     System.out.println(addonsJSON.get(theKey)); 
     JSONArray values = addonsJSON.getJSONArray(theKey); 
     for (int j = 0; j < values.length(); j+=2) 
     { 
      JSONObject vals = new JSONObject(values.getString(j)); 

      CartChild cartChild = new CartChild(); 
      cartChild.name = vals.getString("name"); 
      cartChild.price = vals.getString("value"); 
      itemtotal += Float.parseFloat(vals.getString("value")); 

      childsList.add(cartChild); 
     } 
    } 
} 
+0

後,如果您想幫助一些代碼,否則你的文章很可能被關閉。 – ChrisStillwell

+0

您的JSON無效,請將其置於JSON驗證程序 – Christian

+0

編輯我的答案。我在Stackoverflow中修改了JSON。這是真實的 – TdoubleG

回答

0

您的JSON是不是有效 JSON文本。你不能遍歷無效JSON

修改它像

{ 
    "1": [ 
     { 
      "id": "1", 
      "value": "0.00", 
      "name": "Scharf" 
     }, 
     "Soße", 
     { 
      "id": "2", 
      "value": "1.00", 
      "name": "Tzatziki" 
     }, 
     "Soße" 
    ], 
    "2": [ 
     { 
      "id": "3", 
      "value": "1.15", 
      "name": "Knobi" 
     }, 
     "Dressing" 
    ] 
} 

比較你的JSON和礦上http://jsonlint.com/

+0

編輯我的問題。我在這裏通過計算器修改了我的JSOn。現在這是來自addonsJSON變量 – TdoubleG

+0

的真正的一個,但它仍然無效。我不知道Android L如何處理它,但你必須修改你的JSON – hakiko

+0

好吧,我明白了。奇怪。 JSONLint告訴我,JSON是有效的。 – TdoubleG

0

的問題是,我HashMap的轉換爲JSONObject。之後,我將我的JSONObject作爲字符串保存到了SugarORM。轉換是錯誤! 所以我用GSON試了一下。現在它可以工作。

所以才用這樣的:

Gson gson = new Gson(); 
String json = gson.toJson(hashmap);