Я сравниваю файлы json между двумя разными конечными точками API, чтобы увидеть, какие записи json нуждаются в обновлении, которые требуют создания, а какие - удаления. Итак, сравнивая два файла json, я хочу получить три файла json, по одному для каждой операции.
JSON на обеих конечных точках структурирован следующим образом (но они используют разные ключи для одинаковых наборов значений; разные проблемы):
{
"records": [{
"id": "id-value-here",
"c": {
"d": "eee"
},
"f": {
"l": "last",
"f": "first"
},
"g": ["100", "89", "9831", "09112", "800"]
}, {
…
}]
}
Таким образом, json представлен в виде списка словарей (с дополнительными вложенными списками и словарями).
Если заданное значение идентификатора конечной точки json (j1) («id» :) существует в другой конечной точке json (j2), то эта запись должна быть добавлена в j_update.
Пока что у меня есть что-то подобное, но я вижу, что .values () не работает, потому что пытается работать со списком, а не со всеми перечисленными словарями (?):
j_update = {r for r in j1['records'] if r['id'] in
j2.values()}
Это не возвращает ошибку, но создает пустой набор, используя тестовые файлы json.
Похоже, это должно быть просто, но я думаю о словарях в списке, представляющих json. Мне нужно сплющить j2, или есть простой способ словаря Python для достижения этого?
==== редактировать j1 и j2 ====
иметь одинаковую структуру, использовать разные ключи; данные игрушки
j1
{
"records": [{
"field_5": 2329309841,
"field_12": {
"email": "cmix@etest.com"
},
"field_20": {
"last": "Mixalona",
"first": "Clara"
},
"field_28": ["9002329309999", "9002329309112"],
"field_44": ["1002329309832"]
}, {
"field_5": 2329309831,
"field_12": {
"email": "mherbitz345@test.com"
},
"field_20": {
"last": "Herbitz",
"first": "Michael"
},
"field_28": ["9002329309831", "9002329309112", "8002329309999"],
"field_44": ["1002329309832"]
}, {
"field_5": 2329309855,
"field_12": {
"email": "nkatamaran@test.com"
},
"field_20": {
"first": "Noriss",
"last": "Katamaran"
},
"field_28": ["9002329309111", "8002329309112"],
"field_44": ["1002329309877"]
}]
}
j2
{
"records": [{
"id": 2329309831,
"email": {
"email": "mherbitz345@test.com"
},
"name_primary": {
"last": "Herbitz",
"first": "Michael"
},
"assign": ["8003329309831", "8007329309789"],
"hr_id": ["1002329309877"]
}, {
"id": 2329309884,
"email": {
"email": "yinleeshu@test.com"
},
"name_primary": {
"last": "Lee Shu",
"first": "Yin"
},
"assign": ["8002329309111", "9003329309831", "9002329309111", "8002329309999", "8002329309112"],
"hr_id": ["1002329309832"]
}, {
"id": 23293098338,
"email": {
"email": "amlouis@test.com"
},
"name_primary": {
"last": "Maxwell Louis",
"first": "Albert"
},
"assign": ["8002329309111", "8007329309789", "9003329309831", "8002329309999", "8002329309112"],
"hr_id": ["1002329309877"]
}]
}