2017-02-01 4 views
0

У меня есть n набор строк json. Как я могу объединить их только в Java?Рекурсивно объединить структуры 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.

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 сначала отобразить карту, а затем слить (перебрать по карте и слить).

Смежные вопросы