Как вывести отличающиеся ключи в двух JSON?

Я бы хотел подтягивать два JSON файла (они почти идентичны) и чтобы ключи, которые не сходятся выводились на экран (это для быстрой правки разных ключей). Нашел вот такое решение:

import json

with open('file name.json') as a:
    text = json.load(a)

with open('file name 2.json') as b:
    text2 = json.load(b)

if text == text2:
    print(True)
else:
    c = set(text.keys()) ^ set(text2.keys())
    print(c)

(выводит разность ключей) Но выводит мне вот это:

set() Process finished with exit code 0

Никогда не работал с JSON.


Ответы (1 шт):

Автор решения: Dmitry

Давайте разберем, что у вас происходит.
Вот здесь вы сравниваете словари полностью

if text == text2:
    print(True)

т. е. и ключи и значения и если на вход подать два вот таких словаря (ключи одниковы, значения нет)

text = {'test': 1, 'test2': 2}
text2 = {'test': 1, 'test2': 3}

тело ifа не отработает и пойдет дальше в else.

В этой части кода:

else:
    c = set(text.keys()) ^ set(text2.keys())
    print(c)

вы работаете только с ключами и при тех же входных данных (словари text text2), переменная c будет содержать пустой set(), что в принципе у вас и получается.

Если вы ищите разность только ключей, то и работайте только с ключами в условии

if text.keys() == text2.keys():
    print(True)
else:
    c = set(text.keys()) ^ set(text2.keys())
    print(c)

при таком условии вывод будет True.

Если же вы ищите отличие значений под одинаковыми ключами, то

  c = set(text.keys()) ^ set(text2.keys())

не подходит

→ Ссылка