2017-02-01 7 views
0

私はjson文字列をnセット持っています。どのようにそれらをJavaで1つだけにマージできますか?JSON構造体を再帰的にマージする

競合が発生した場合、最新のjsonは以前の情報よりも優先されます。配列はマージされません。

JSONベース:

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

と合併:

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

は次のようになります。

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

答えて

0

JSONを再帰的にマージする1つのメソッドを実行しました。

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

あなたはジャクソンのライブラリを見て、変換したいことJSON文字列最初にマッピングしてマージする(マップを繰り返してマージ)。