Я бы просто связал имя столбца и порядок с SQL-запросом, но только после того, как
Я считаю, что это эффективно по сравнению с получением результатов на прикладном уровне и их сортировкой здесь.
Как я сказал в комментарии, содержимое ваших двух входных файлов не соответствует формату JSON.
Вот их модифицированные версии для включения тестирования:
suggested.json
:
{
"suggested": [
{
"city": "Berlin",
"location": "Europe",
"hotels": true,
"restaurants": true,
"rivers": false
},
{
"city": "Andorra",
"location": "Global",
"hotels": false,
"restaurants": true,
"rivers": true
}
]
}
master.json
:
{
"master": [
{
"city": "",
"location": "Europe",
"hotels": true,
"restaurants": false,
"rivers": false
}
]
}
И вот модифицированная версия вашего кода, которая будет обрабатывать их так, как вы хотите:
import json
def openJsonFile(file):
with open(file) as json_data:
workData = json.load(json_data)
return workData
def compareJsonFiles(suggested, master):
master_dict = master['master'][0] # Assumes only one object in the list.
for suggestion in suggested['suggested']:
print('checking suggestion:', suggestion)
matches = 0
for key, value in suggestion.items():
if key not in master_dict:
print (" {0} doesn't have value in {1}".format(key, master_dict))
else:
if master_dict[key] == value:
print(" for key %r values match" % key)
matches += 1
print(' there were {} matches'.format(matches))
suggested = openJsonFile('suggested.json')
master = openJsonFile('master.json')
compareJsonFiles(suggested, master)
Вот вывод, который он производит, учитывая два вышеупомянутых файла:
checking suggestion: {'city': 'Berlin', 'location': 'Europe', 'hotels': True, 'restaurants': True, 'rivers': False}
for key 'location' values match
for key 'hotels' values match
for key 'rivers' values match
there were 3 matches
checking suggestion: {'city': 'Andorra', 'location': 'Global', 'hotels': False, 'restaurants': True, 'rivers': True}
there were 0 matches
Ваш master
узел - это список, а не словарь. Если вы уверены, что мастер всегда содержит только одну запись, пропустите ее через
compareJsonFiles(suggested_data, master_data[0])
Взгляните на Цербер (не путать с Kerberos) http://docs.python-cerberus.org/en/stable/usage.html#basic-usage
[112 ] Все, что вы хотите, и даже больше - проверка данных JSON общего назначения и применение схем.