2014-03-24 44 views
7

多一個JSONObjects Android的JSON解析我有一個JSON字符串來自服務器和它看起來像這樣內的JSONObject

{ 
"categories": { 
    "0": { 
     "term_id": "247", 
     "name": "Content Curation" 
    }, 
    "1": { 
     "term_id": "50", 
     "name": "Content Marketing" 
    }, 
    "2": { 
     "term_id": "2", 
     "name": "Curation" 
    }, 
    "3": { 
     "term_id": "246", 
     "name": "Inbound Marketing" 
    }, 
    "4": { 
     "term_id": "47", 
     "name": "Marketing" 
    }, 
    "5": { 
     "term_id": "4", 
     "name": "News Curation" 
    }, 
    "6": { 
     "term_id": "36", 
     "name": "SEO" 
    }, 
    "8": { 
     "term_id": "248", 
     "name": "Wordpress Content Curation" 
    } 
} 

}

我的任務是讓「term_id」和「名稱的值「領域。 我用這個代碼從當前的JSONObject中獲取「categories」對象。

JSONObject jObject = new JSONObject(responceData); 
    JSONObject categoryObject = jObject.getJSONObject("categories"); 
    JSONArray jarray = new JSONArray("["+categoryObject.toString().substring(1,categoryObject.toString().length() - 1) + "]"); 

    for(int i=0;i<jarray.length();i++) 
    { 
    JSONObject jobj = jarray.getJSONObject(i); 
    String term_id=jobj.getString("term_id"); 
    String name=jobj.getString("name"); 
    } 

和categoryObject看起來像這樣

{ 
"0": { 
    "term_id": "247", 
    "name": "Content Curation" 
}, 
"1": { 
    "term_id": "50", 
    "name": "Content Marketing" 
}, 
"2": { 
    "term_id": "2", 
    "name": "Curation" 
}, 
"3": { 
    "term_id": "246", 
    "name": "Inbound Marketing" 
}, 
"4": { 
    "term_id": "47", 
    "name": "Marketing" 
}, 
"5": { 
    "term_id": "4", 
    "name": "News Curation" 
}, 
"6": { 
    "term_id": "36", 
    "name": "SEO" 
}, 
"8": { 
    "term_id": "248", 
    "name": "Wordpress Content Curation" 
} 

}

但在那之後我不知道如何獲取該領域。有沒有辦法從JSONObject獲取所有JSONObject子元素?

如果你有一個源代碼或可以給我一個例子,請與我分享。

+1

的類別應該是數組。 –

+0

您可以發佈您的服務器代碼 – 2014-03-24 10:31:36

+0

@Dhaval我沒有到服務器端的訪問,即時遠程解析它 – Arshak92

回答

15

在這裏你可以檢索你所有的JSON數據,要求一個特定的鍵和innerKey得到你想要的,歡呼聲

try 
    { 
     String jsonString="";//your json string here 
     JSONObject jObject= new JSONObject(jsonString).getJSONObject("categories"); 
     Iterator<String> keys = jObject.keys(); 
     while(keys.hasNext()) 
     { 
      String key = keys.next(); 
      Log.v("**********", "**********"); 
      Log.v("category key", key); 
      JSONObject innerJObject = jObject.getJSONObject(key); 
      Iterator<String> innerKeys = innerJObject.keys(); 
      while(innerKeys.hasNext()) 
      { 
       String innerKkey = keys.next(); 
       String value = innerJObject.getString(innerKkey); 
       Log.v("key = "+key, "value = "+value); 
      } 
     } 
    } 
    catch (JSONException e) 
    { e.printStackTrace(); } 
+1

感謝您的幫助。附:我使用你的代碼找到了更好的解決方案。詳情請查看我的答案。 – Arshak92

+0

謝謝@Ahmed – Atula

+0

雖然這可能回答OP的問題,但這種方式已經有很大的性能漏洞,尤其是大量的記錄。你可以從這裏確認https://www.mkyong.com/java/while-loop-for-loop-and-iterator-performance-test-java/ –

5

檢查this answer,這樣你不需要知道關鍵字,並且可以循環訪問內部對象,但類別會更好,因爲JSONArray而不是Object,這樣你就可以正常循環通過

for(int i = 0; i < array.length(); i++) { 
    JSONObject obj = myArray.get(i); 
    .... 
} 
+0

感謝 – Arshak92

+0

感謝您的幫助,我找到了一個解決方案,請檢查我的答案的詳細信息... – Arshak92

2

使用keys()迭代器遍歷所有屬性,併爲每個屬性調用get()。

Iterator<String> iter = json.keys(); 
while (iter.hasNext()) { 
    String key = iter.next(); 
    try { 
     Object value = json.get(key); 
    } catch (JSONException e) { 
     // Something went wrong! 
    } 
} 

看到這個:https://stackoverflow.com/a/13573965/2480911

1

試試這個

JSONObject jObject = new JSONObject(responceData); 
JSONObject categoryObject = jObject.getJSONObject("categories"); 
JSONObject obj0 = categoryObject.getJSONObject("0"); 
String termId0 obj0.getString("term_id"); 
String name0 obj0.getString("name"); 
JSONObject obj1 = categoryObject.getJSONObject("1"); 
String termId1 obj1.getString("term_id"); 
String name1 obj1.getString("name"); 

但我wqrahd同意,分類應該是一個數組

+0

感謝您的答案,但它不是當前JSON的最佳解決方案,因爲「0」和「1」是動態數字。 – Arshak92

1

非常感謝Ahmad Dwaik和Tom Hart給出的答案。 這是解決方案的代碼。

try 
     { 

      JSONObject jObject= new JSONObject(responseData).getJSONObject("categories"); 
      Iterator<String> keys = jObject.keys(); 
      while(keys.hasNext()) 
      { 
       String key = keys.next(); 
       Log.v("**********", "**********"); 
       Log.v("category key", key); 
       JSONObject innerJObject = jObject.getJSONObject(key); 

       String name = innerJObject.getString("name"); 
       String term_id = innerJObject.getString("term_id"); 

       Log.v("name = "+name, "term_id = "+term_id); 

      } 
     } 
     catch (JSONException e){ 
      e.printStackTrace();  
     } 
1

雖然艾哈邁德Dwaik「術士」提供了一個很好的答案,但有他的代碼當前代碼錯誤是 -

try 
{ 
    String jsonString="";//your json string here 
    JSONObject jObject= new JSONObject(jsonString).getJSONObject("categories"); 
    Iterator<String> keys = jObject.keys(); 
    while(keys.hasNext()) 
    { 
     String key = keys.next(); 
     Log.v("**********", "**********"); 
     Log.v("category key", key); 
     JSONObject innerJObject = jObject.getJSONObject(key); 
     Iterator<String> innerKeys = innerJObject.keys(); 
     while(innerKeys.hasNext()) 
     { 
      String innerKkey = innerKeys.next(); //Here was the error 
      String value = innerJObject.getString(innerKkey); 
      Log.v("key = "+key, "value = "+value); 
     } 
    } 
} 
catch (JSONException e) 
{ e.printStackTrace(); }