要比较两个嵌套较多的JSON对象并打印出结构和值的差异,可以使用递归函数来遍历JSON对象的每一个节点。以下是一个示例代码,展示了如何实现这一功能:
import json
def compare_json(obj1, obj2, path=""):
if isinstance(obj1, dict) and isinstance(obj2, dict):
for key in set(obj1.keys()) | set(obj2.keys()):
new_path = f"{path}.{key}" if path else key
if key not in obj1:
print(f"Key '{new_path}' missing in first JSON")
elif key not in obj2:
print(f"Key '{new_path}' missing in second JSON")
else:
compare_json(obj1[key], obj2[key], new_path)
elif isinstance(obj1, list) and isinstance(obj2, list):
if len(obj1) != len(obj2):
print(f"List length mismatch at '{path}': {len(obj1)} vs {len(obj2)}")
for i, (item1, item2) in enumerate(zip(obj1, obj2)):
compare_json(item1, item2, f"{path}[{i}]")
else:
if obj1 != obj2:
print(f"Value mismatch at '{path}': {obj1} vs {obj2}")
# 示例JSON对象
json1 = {
"name": "Alice",
"age": 30,
"address": {
"city": "New York",
"zip": "10001"
},
"skills": ["Python", "Java"]
}
json2 = {
"name": "Alice",
"age": 31,
"address": {
"city": "New York",
"zip": "10002"
},
"skills": ["Python", "C++"]
}
# 将JSON字符串转换为Python对象
obj1 = json.loads(json.dumps(json1))
obj2 = json.loads(json.dumps(json2))
# 比较两个JSON对象
compare_json(obj1, obj2)
通过上述代码和方法,可以有效地比较和打印出两个复杂JSON对象的差异。
领取专属 10元无门槛券
手把手带您无忧上云