I created a program that compares two python dictionaries and displays the differences between them. It works with a dict that has a depth of 2 or less. What should I do to be able to handle dicts with greater depth, also nested dicts?
Another problem I am facing is passing the json array through my get_json () function, which it returns as a list. And the program gets out with a list instead of a dict. How should I solve this?
My program:
import json
def get_json():
file_name = raw_input("Enter name of JSON File: ")
with open(file_name) as json_file:
json_data = json.load(json_file)
return json_data
def print_diff(json1, json2):
for n in json1:
if n not in json2:
print('- "' + str(n) + '":')
for n in json2:
if n not in json1:
print('+ "' + str(n) + '":')
continue
if json2[n] != json1[n]:
if type(json2[n]) not in (dict, list):
print('- "' + str(n) + '" : "' + str(json1[n]))
print('+ "' + str(n) + '" : "' + str(json2[n]))
else:
if type(json2[n]) == dict:
print_diff(json1[n], json2[n])
continue
return
def main():
file1 = get_json()
print(type(file1))
file2 = get_json()
print(type(file2))
print_diff(file1, file2)
if __name__ == "__main__":
main()
dict 1 example:
{
"widget": {
"debug": "on",
"window": {
"title": "Sample Konfabulator Widget",
"name": "main_window",
"width": 500,
"height": 500
},
"image": {
"src": "Images/Sun.png",
"name": "sun1",
"hOffset": 250,
"vOffset": 250,
"alignment": "center"
},
"text": {
"data": "Click Here",
"size": 36,
"style": "bold",
"name": "text1",
"hOffset": 250,
"vOffset": 100,
"alignment": "center",
"onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
}
}
}
dict 2 example:
{
"widget": {
"debug": "on",
"window": {
"title": "Sample Konfabulator Widget",
"name": "main_window",
"width": 500,
"height": 500
},
"image": {
"src": "Images/Sun.png",
"name": "sun2",
"hOffset": 100,
"vOffset": 100,
"alignment": "center"
},
"text": {
"data": "Click Here",
"size": 36,
"style": "bold",
"name": "text1",
"hOffset": 250,
"vOffset": 100,
"alignment": "center",
"onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
}
}
}
Output Example:
Enter name of JSON File: JSON1.json
<type 'dict'>
Enter name of JSON File: JSON2.json
<type 'dict'>
- "vOffset" : "250
+ "vOffset" : "100
- "name" : "sun1
+ "name" : "sun2
- "hOffset" : "250
+ "hOffset" : "100