import json
import collections
json_string = """
{
"a": 1,
"a": 2,
"b": [1,2,3],
"b": "foo",
"c": {"x":1, "y":2, "z":3, "a":4}
}
"""
def detect_duplicate_keys(list_of_pairs):
key_count = collections.Counter(k for k,v in list_of_pairs)
duplicate_keys = ', '.join(k for k,v in key_count.items() if v>1)
if len(duplicate_keys) != 0:
raise ValueError('Duplicate key(s) found: {}'.format(duplicate_keys))
def validate_data(list_of_pairs):
detect_duplicate_keys(list_of_pairs)
# More dectection, each of them will raise exception upon invalid
# data
return list_of_pairs
obj = json.loads(json_string, object_pairs_hook=validate_data)
print obj
Comments