To compare two JSON objects with the same elements in a different order equal with Python, we can load the JSON strings into dicts with json.loads.
Then we can sort the items with sorted and then compare them.
For instance, we write
import json
a = json.loads("""
{
"errors": [
{"error": "invalid", "field": "email"},
{"error": "required", "field": "name"}
],
"success": false
}
""")
b = json.loads("""
{
"success": false,
"errors": [
{"error": "required", "field": "name"},
{"error": "invalid", "field": "email"}
]
}
""")
def ordered(obj):
if isinstance(obj, dict):
return sorted((k, ordered(v)) for k, v in obj.items())
if isinstance(obj, list):
return sorted(ordered(x) for x in obj)
else:
return obj
is_same = ordered(a) == ordered(b)
to load the JSON strings into dicts with json.loads.
And then we create the ordered function to sort the key-value pairs with the dict keys ordered.
Then we call ordered on both dicts and then check if they’re equal.