#python #json
#python #json
Вопрос:
У меня есть два объекта json. Оба могут иметь общие ключи, некоторые присутствуют только в первом объекте, в то время как некоторые присутствуют только во втором. Когда я использую эти два объекта, структура объектов не должна меняться. Будет добавлен только новый уровень ключей, такой как указание, для какого объекта принадлежит это значение. Даже структура объектов json представляет собой иерархию, уровни которой не являются фиксированными.
a = {"parent1" : { "childa1" : { "grandchilda11" : { "data": values},
"grandchilda12" :{"data" : values }
}
"data" : values
}
{ "childa2" : { "grandchilda21" : { "data": values},
"grandchilda22" :{"data" : values }
}
"data" : values
}
}
b = { "parent1" : { "childa1" : { "grandchilda11" : { "data": values},
"grandchilda12" :{"data" : values }
}
"data" : values
}
{ "childa2" : { "grandchilda21" : { "data": values},
"grandchilda22" :{"data" : values }
}
"data" : values
},
"parent2" : { "childb1" : { "grandchildb11" : { "data": values},
"grandchildb12" :{"data" : values }
}
"data" : values
}
{ "childb2" : { "grandchildb21" : { "data": values}
}
"data" : values
}
}
Результирующий результат должен объединять этот тип строки json . Уровень данных здесь содержит непосредственно значения, в то время как в результирующем должно быть похоже, какому объекту он принадлежит, действуя как ключ, а затем значения.
"data" : { "a" : values , "b":values}
Комментарии:
1. Мне не совсем ясно, что
values
должно быть: весь словарь данных или, возможно, уже существующий'data'
ключ? Если последнее, то каково ожидаемое поведение? Выравнивание значений?2. У вас нет «двух объектов json», у вас есть два
dict
. Простые старые правила Python. Самый используемый тип в языке, очень хорошо документированный. Теперь не могли бы вы, пожалуйста, отредактировать свой вопрос, указав хотя бы 1. полный пример входных данных и ожидаемых результатов для этих входных данных («значения» — неполный пример) и 2. что вы пробовали, что не сработало?
Ответ №1:
Я думаю, это может быть то, что вы ищете.
Если у вас есть словари данных, a
и b
вы можете вызвать приведенную ниже функцию, используя merge(a, b)
для объединения двух, как вы сказали. Это основывается на предположении, что оба словаря имеют одинаковую структуру для них.
def merge(a, b):
if type(a) is str:
return { 'a': a, 'b': b }
else:
for key in a:
a[key] = merge(a[key], b[key])
return a
Ответ №2:
Попробуйте это:
def merge(obj1, obj2):
for key in obj2:
obj1[key] = obj2[key]
return obj1