2015-06-26 4 views
0

Перед тем, как разобрать json json array, но этот объект json. Его это остановило меня. Как я могу разобрать JSON как это:Parse 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

спасибо за ответ, но если у меня динамически 'test', пример' test1' , 'test2' ...' test34' – ntj23061

+0

добро пожаловать, вы можете использовать цикл for для этого, я сделал редактирование. –

2

Если вы не имеют фиксированный набор ключей, которые вы знаете заранее, единственный способ, чтобы разобрать его, чтобы использовать keys(). Он возвращает Iterator с ключами, содержащимися в JSONObject. В вашем случае, вы могли бы

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 вернется test1 и test2, в то время как iterator2 вернется 1 и 2, для test1 и 1, 2, 5 для test2