Saltar al contenido

Fusionar (Concat) Múltiples JSONObjects en Java

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *