2015-06-26 5 views
1

Я пытаюсь поместить JSONObject внутри JSONArray в Java. Вот мои два объекта:JSONObject внутри JSONArray

JSONArray:

[{ 
    "url": null, 
    "flag": "0", 
    "read": "0", 
    "time": 2000, 
    "exp": null, 
    "population": 10 
}] 

JSONObject:

{ 
"events": [ 
    { 
     "color": "Green", 
     "event": "Restart" 
    }, 
    { 
     "color": "Black", 
     "event": "Shutdown" 
    }, 
    { 
     "color": "White", 
     "event": "Read" 
    }  
] 
} 

Ожидаемый результат:

[ 
{ 
    "url": null, 
    "flag": "0", 
    "read": "0", 
    "time": 2000, 
    "exp": null, 
    "population": 10, 
    "events": [ 
     { 
      "color": "Green", 
      "event": "Restart" 
     }, 
     { 
      "color": "Black", 
      "event": "Shutdown" 
     }, 
     { 
      "color": "White", 
      "event": "Read" 
     } 
    ] 
} 
] 

Я пытался использовать этот код, но результат не ok:

jsonArray.put(jsonObject); 

Неожиданный результат:

[ 
{ 
    "url": null, 
    "flag": "0", 
    "read": "0", 
    "time": 2000, 
    "exp": null, 
    "population": 10 
}, 
{ 
    "events": [ 
     { 
      "color": "Green", 
      "event": "Restart" 
     }, 
     { 
      "color": "Black", 
      "event": "Shutdown" 
     }, 
     { 
      "color": "White", 
      "event": "Read" 
     } 
    ] 
} 
] 

«События» ключ-значение, наиболее быть внутри уникального элемента в JSONArray, а не в качестве другого элемента.

ответ

2

JSONArray содержит JSONObject. Когда вы jsonArray.put(jsonObject); вы добавляете его в JSONArray, а не в JSONObject в JSONArray.

Это добавит jsonObject к первому JSONObject в вашем JSONArray

jsonArray.getJsonObject(0).put("events",jsonObject.get("events")); 
+1

Это именно то, чего я ожидал. – aseolin

2

Вам нужно,

((JSONObject) jsonArray.get(0)).put("events", jsonObject.get("events")); 

Или, в более обобщенной форме,

for (Map.Entry entry : (Set<Map.Entry>) jsonObject.entrySet()) { 
     ((JSONObject) jsonArray.get(0)).put(entry.getKey(), entry.getValue()); 
    } 
0

я сделал не проверял код, но я думаю, что это сработает. Попробуйте, если хотите. jsonArray[0].events создаст новое поле с именем «события» в индексированном объекте 0.

jsonArray[0].events = jsonObject.events; 
Смежные вопросы