Навелосипедил немного
Алгоритм нужно тестить, а так, вроде бы работает
Сделал на питоне, но алгоритм будет такой же и для с++
Javascript
{
"Comment":"My comment",
"Count":10,
"Errors": null,
"DiskParam":
{
"DB":10.000000,
"DBAngle":1.234000
}
}
{
"Comment":"My super comment!",
"Count":20,
"Errors": "@##@##%!",
"DiskParam":
{
"DB":42,
"Foo": [1, 2, 3, 4]
}
}
Питоничий json-сериализатор парсит строку в стандартные питоничьи типы: dict, list, None, False, True, int, float, str, поэтому в функцию попадают 2 dict.
Слияние идет от второго в первый словарь.
В цикле перебираются все элементы и возвращаются их ключ (k) и значение (v)
В условии мы проверяем что ключ k есть у первого словаря и то, что значениями словарей j1 и j2 являются словари (json object), тогда вызываем сами себя
Если условие не совпало, просто добавляем / переписываем значение под ключом k. Добавляем, если такого ключа нет в словаре, и переписываем если есть
https://github.com/gil9red/SimplePyScripts/blob/master/jsonmerge.pyPython
def jsonmerge(j1, j2):
for k, v in j2.items():
if k in j1 and isinstance(j1[k], dict) and isinstance(v, dict):
jsonmerge(j1[k], v)
else:
j1[k] = v
Результат:
Javascript
{
"Errors": "@##@##%!",
"Comment": "My super comment!",
"DiskParam": {
"DB": 42,
"DBAngle": 1.234,
"Foo": [1, 2, 3, 4]
},
"Count": 20
}