2017-02-01 4 views
0

Ich habe n Satz von JSON-String. Wie kann ich sie nur in Java zusammenführen?JSON-Strukturen rekursiv zusammenführen

Die neuesten json überschreiben vorherige Informationen im Falle eines Konflikts. Arrays werden nicht zusammengeführt.

Beispiel

json Basis:

{ 
    "plank" : { 
     "count" : 2, 
     "properties" : { 
      "type" : "oak", 
      "dimensions" : [5.0, 25, 25] 
     } 
    } 
} 

verschmelzen mit:

{ 
    "plank" : { 
     "count" : 4, 
     "properties" : { 
      "dimensions" : [5.0, 12.5, 25] 
     } 
    }, 
    "scrap" : { 
     "count" : 1, 
    } 
} 

werden:

{ 
    "plank" : { 
     "count" : 4, 
     "properties" : { 
      "type" : "oak", 
      "dimensions" : [5.0, 12.5, 25] 
     } 
    }, 
    "scrap" : { 
     "count" : 1, 
    } 
} 

Antwort

0

Am Ende habe ich eine Methode, die JSON rekursiv zusammenführen.

public JSONObject merge(List<JSONObject> objects) { 
    for (int i = 0, j = 1; i < objects.size() - 1; i++, j++) { 
     merge(objects.get(i), objects.get(j)); 
    } 
    return objects.get(objects.size() - 1); 
} 


private void merge(JSONObject j1, JSONObject j2) { 
    Iterator<String> keys = j1.keys(); 
    Object obj1, obj2; 
    while (keys.hasNext()) { 
     String next = keys.next(); 
     if (j1.isNull(next)) continue; 
     obj1 = j1.get(next); 
     if (!j2.has(next)) j2.putOpt(next, obj1); 
     obj2 = j2.get(next); 
     if (obj1 instanceof JSONObject && obj2 instanceof JSONObject) { 
      merge((JSONObject) obj1, (JSONObject) obj2); 
     } 
    } 
} 
0

Sie können einen Blick auf Jackson Bibliothek nehmen möchten und konvertieren die JSON-Zeichenfolge zuerst zuordnen und dann zusammenführen (durch die Karte iterieren und zusammenführen).