Страницы

Поиск по вопросам

суббота, 16 марта 2019 г.

Как наилучшим образом “смержить” два JSONObject?

Имеем: JSONObject o1 = { "one": "1", "two": "2", "three": "3" } JSONObject o2 = { "four": "4", "five": "5", "six": "6" } В результате слияния o1 и o2 должны получить: JSONObject result = { "one": "1", "two": "2", "three": "3", "four": "4", "five": "5", "six": "6" } Один из вариантов - использвать иторатор по keys, и пока hasNext - добавлять поле по ключу в новый объект. Ищу более красивый способ. Note - Ключи в o1 и o2 повторяться не могут.


Ответ

Я пришел к тому, что наилучшим решением будет использования иторатора jsonObject.keys() и ручной сборки результурующего объекта. public JSONObject mergeJsonObjects(JSONObject o1, JSONObject o2) { JSONObject result = new JSONObject(); Iterator i1 = o1.keys(); Iterator i2 = o2.keys(); String tmp_key; while (i1.hasNext()) { tmp_key = (String) i1.next(); try { result.put(tmp_key, o1.get(tmp_key)); }catch (JSONException ignored){} } while (i2.hasNext()) { tmp_key = (String) i2.next(); try { result.put(tmp_key, o2.get(tmp_key)); }catch (JSONException ignored){} } return result; } upd: public JSONObject mergeJsonObjects(ArrayList jsonObjects) { JSONObject result = new JSONObject(); String tmp_key; for (JSONObject jsonObject: jsonObjects){ Iterator iterator = jsonObject.keys(); while (iterator.hasNext()) { tmp_key = (String) iterator.next(); try { result.put(tmp_key, jsonObject.get(tmp_key)); }catch (JSONException ignored){} } } return result; }

Комментариев нет:

Отправить комментарий