2016-10-20 2 views
-1

У меня есть два объекта json. Оба могут иметь общие ключи, некоторые из них присутствуют только в первом объекте, а некоторые - только во втором. Когда я нахожу эти два объекта, структура объектов не должна меняться. Будет добавлен только новый уровень ключей, например указание, для какого объекта принадлежит это значение. Даже структура json-объектов представляет собой иерархию, уровни которой не фиксированы.Слияние объектов Json в python?

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} 
+0

Мне не совсем ясно, что означает «значения»: весь словарь данных или, возможно, уже существующий ключ «данных»? Если последнее, каково ожидаемое поведение? Сглаживание значений? – brianpck

+3

У вас нет «двух json-объектов», у вас есть два 'dict'. Обычный питон Питона. Самый используемый тип на языке, очень хорошо документированный. Теперь вы можете изменить свой вопрос, по крайней мере, на 1. ** полный ** пример ввода и ожидаемых результатов для этих входов («значения» - не полный пример) и 2. что вы пытались, что не сработали? –

ответ

0

Я думаю, что это может быть то, что вы ищете.

Если у вас есть словари данных 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 
Смежные вопросы