Te sugerimos que revises esta resolución en un ambiente controlado antes de enviarlo a producción, un saludo.
Solución:
Si desea un nuevo objeto con dos keysObject1 y Object2, puedes hacer:
JSONObject Obj1 = (JSONObject) jso1.get("Object1");
JSONObject Obj2 = (JSONObject) jso2.get("Object2");
JSONObject combined = new JSONObject();
combined.put("Object1", Obj1);
combined.put("Object2", Obj2);
Si desea fusionarlos, por ejemplo, un objeto de nivel superior tiene 5 keys (Stringkey1, ArrayKey, StringKey2, StringKey3, StringKey4), creo que tienes que hacerlo manualmente:
JSONObject merged = new JSONObject(Obj1, JSONObject.getNames(Obj1));
for(String key : JSONObject.getNames(Obj2))
merged.put(key, Obj2.get(key));
Esto sería mucho más fácil si JSONObject implementara Map y admitiera putAll.
En algunos casos, necesita una fusión profunda, es decir, fusionar los contenidos de los campos con nombres idénticos (al igual que cuando se copian carpetas en Windows). Esta función puede ser útil:
/**
* Merge "source" into "target". If fields have equal name, merge them recursively.
* @return the merged object (target).
*/
public static JSONObject deepMerge(JSONObject source, JSONObject target) throws JSONException
for (String key: JSONObject.getNames(source))
Object value = source.get(key);
if (!target.has(key))
// new value for "key":
target.put(key, value);
else
// existing value for "key" - recursively deep merge:
if (value instanceof JSONObject)
JSONObject valueJson = (JSONObject)value;
deepMerge(valueJson, target.getJSONObject(key));
else
target.put(key, value);
return target;
/**
* demo program
*/
public static void main(String[] args) throws JSONException
JSONObject a = new JSONObject("offer: issue1: value1, accept: true");
JSONObject b = new JSONObject("offer: issue2: value2, reject: false");
System.out.println(a+ " + " + b+" = "+JsonUtils.deepMerge(a,b));
// prints:
// "accept":true,"offer":"issue1":"value1" + "reject":false,"offer":"issue2":"value2" = "reject":false,"accept":true,"offer":"issue1":"value1","issue2":"value2"
Puede crear un nuevo JSONObject como este:
JSONObject merged = new JSONObject();
JSONObject[] objs = new JSONObject[] Obj1, Obj2 ;
for (JSONObject obj : objs)
Iterator it = obj.keys();
while (it.hasNext())
String key = (String)it.next();
merged.put(key, obj.get(key));
Con este código, si tienes alguno repetido keys Entre Obj1
y Obj2
el valor en Obj2
permanecerá Si desea los valores en Obj1
para ser conservado se debe invertir el orden de los array en la línea 2.
Más adelante puedes encontrar las anotaciones de otros administradores, tú además eres capaz insertar el tuyo si dominas el tema.