要比较两个具有相同名称但值不同的JSON文件,可以使用以下步骤来解决:
下面是一个示例代码,用于比较两个JSON文件的函数:
import json
def compare_json(file1, file2):
with open(file1, 'r') as f1, open(file2, 'r') as f2:
json1 = json.load(f1)
json2 = json.load(f2)
differences = {}
def compare_objects(obj1, obj2, path=''):
if isinstance(obj1, dict) and isinstance(obj2, dict):
for key in obj1:
if key in obj2:
compare_objects(obj1[key], obj2[key], f'{path}.{key}')
else:
differences[f'{path}.{key}'] = (obj1[key], None)
for key in obj2:
if key not in obj1:
differences[f'{path}.{key}'] = (None, obj2[key])
elif isinstance(obj1, list) and isinstance(obj2, list):
for i in range(min(len(obj1), len(obj2))):
compare_objects(obj1[i], obj2[i], f'{path}[{i}]')
if len(obj1) > len(obj2):
for i in range(len(obj2), len(obj1)):
differences[f'{path}[{i}]'] = (obj1[i], None)
elif len(obj1) < len(obj2):
for i in range(len(obj1), len(obj2)):
differences[f'{path}[{i}]'] = (None, obj2[i])
else:
if obj1 != obj2:
differences[path] = (obj1, obj2)
compare_objects(json1, json2)
return differences
# 用法示例
differences = compare_json('file1.json', 'file2.json')
for key, (value1, value2) in differences.items():
print(f'{key}: {value1} != {value2}')
请注意,此代码假设JSON文件的格式正确,并且它们没有嵌套太深以致于超出Python递归深度限制。如果JSON文件非常大或嵌套层级很深,可能需要对代码进行优化。