Объединить (Concat) несколько JSONObjects в Java - PullRequest
48 голосов
/ 08 марта 2010

Я потребляю немного JSON из двух разных источников, в итоге получаю два JSONObject с, и я хотел бы объединить их в один.

Данные:

"Object1": {
    "Stringkey":"StringVal",
    "ArrayKey": [Data0, Data1]
}

"Object2": {
    "Stringkey":"StringVal",
    "Stringkey":"StringVal",
    "Stringkey":"StringVal",
}

Код, используя http://json.org/java/ библиотека:

// jso1 and jso2 are some JSONObjects already instantiated
JSONObject Obj1 = (JSONObject) jso.get("Object1");
JSONObject Obj2 = (JSONObject) jso.get("Object2");

Так что в этой ситуации я хотел бы объединить Obj1 и Obj2, чтобы сделать совершенно новый JSONObject или соединить одно с другим. Любые идеи, кроме того, чтобы раздвинуть их все на части и индивидуально добавить с помощью put s?

Ответы [ 11 ]

0 голосов
/ 25 июля 2016

В дополнение к ответу @ erel мне пришлось внести это изменение (я использую org.json.simple) для внешнего else для работы с JSONArray s:

            // existing value for "key" - recursively deep merge:
            if (value instanceof JSONObject) {
                JSONObject valueJson = (JSONObject)value;
                deepMerge(valueJson, (JSONObject) target.get(key));
            } 

            // insert each JSONArray's JSONObject in place
            if (value instanceof JSONArray) {
                ((JSONArray) value).forEach(
                    jsonobj ->
                    ((JSONArray) target.get(key)).add(jsonobj));
            }
            else {
                target.put(key, value);
            }
...