2015-06-26 154 views
0

之前我解析json json array,但是這個json對象。它使我陷入了癱瘓。我該如何解析JSON這樣的:解析json(android)

{ "test1": { 
      "1": { 
       "action": "0", 
       "type": "1", 
       "id": "1", 
      }, 
      "2": { 
       "action": "0", 
       "type": "1", 
       "id": "2", 
      } 
     }, 
     "test2": { 
      "1": { 
       "id": "1", 
       "name": "one" 
      }, 
      "2": { 
       "id": "2", 
       "name": "two" 
      }, 
      "5": { 
       "id": "5", 
       "name": "three" 
      } 
     }} 
+0

解釋你的問題? – Emil

+0

你的json不正確。 – Manifest

+0

可能重複的[java迭代JSONObject?](http://stackoverflow.com/questions/9151619/java-iterate-over-jsonobject) – Selvin

回答

0

你可以從字符串創建一個JSONObject波紋管

JSONObject jsonObject = new JSONObject(YOUR_JSON_STRING); 

和解析jsonObject

JSONObject test1Json = jsonObject.getJSONObject("test1"); 
JSONObject oneTest1Json = test1Json.getJSONObject("1"); 

獲得字符串的值

String action = oneTest1Json.getString("action"); 
String type = oneTest1Json.getString("type"); 
String id = oneTest1Json.getString("id"); 
Log.d("Json parse","action -"+action+" type -"+type+" id -"+id); 

如果需要他們爲JSONArray的你可以嘗試

public JSONArray getJsonArray (JSONObject jsonObject){ 
    JSONArray nameJsonArray = jsonObject.names(); 
    JSONArray jsonArray = new JSONArray(); 
    for (int i = 0; i < nameJsonArray.length(); i++) { 
     try { 
      String key = nameJsonArray.getString(i); 
      jsonArray.put(jsonObject.getString(key)); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
    return jsonArray; 
} 

的情況下鍵,如TEST1,TEST2,TEST3 ...

JSONObject jsonObject = new JSONObject("{'test1':'Kasun', 'test2':'columbo','test3': '29'}"); 
    JSONArray jsonArray = new JSONArray(); 
    for (int i = 1; i <= jsonObject.names().length(); i++) { 
     try{ 
      jsonArray.put(jsonObject.getString("test" + i)); 
     }catch (JSONException e){ 
      e.printStackTrace(); 
     } 

這樣你就可以得到你的JSONArray

+0

感謝您的答案,但如果我有動態'測試',例如'test1' ,'test2' ...'test34' – ntj23061

+0

歡迎,你可以使用for循環,我做了一個編輯。 –

2

當你沒有一個固定的一套鑰匙,你知道前期,解析它的唯一方法就是使用keys()。它返回IteratorJSONObject中包含的密鑰。你的情況,你可以有

JSONObject jsonObject = new JSONObject(...); 
Iterator<String> iterator = jsonObject.keys(); 
while(iterator.hasNext()) { 
    String currentKey = iterator.next(); 
    JSONObject obj = jsonObject.optJSONObject(key); 
    if (obj != null) { 
    Iterator<String> iterator2 = obj.keys(); 

    } 
} 

iterator將返回test1test2,而iterator2將返回12,爲test1125test2