Как вывести отличающиеся ключи в двух 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 шт):
Давайте разберем, что у вас происходит.
Вот здесь вы сравниваете словари полностью
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())
не подходит