Ну, вы можете использовать dict
ключи для вычисления пути предков.
import json
def print_json(obj, parent=None):
if isinstance(obj, list):
for child in obj:
for path, item in print_json(child, parent):
yield path, item
elif isinstance(obj, dict):
for key, child in obj.iteritems(): # items() in Python3
child_path = [key] if parent is None else parent + [key]
for path, item in print_json(child, child_path):
yield path, item
else:
yield parent, obj
С вашим примером, у вас есть:
json_obj = json.loads(
'{ "city" : "AGAWAM", "loc" : [ -72.622739, 42.070206 ], "pop" : 15338, "state" : "MA", "_id" : "01001"}'
)
for path, item in print_json(json_obj):
print(path, ":", item)
Результат:
['city'] : AGAWAM
['loc'] : -72.622739
['loc'] : 42.070206
['pop'] : 15338
['state'] : MA
['_id'] : 01001
Другой пример:
json_obj = json.loads(
'{ "city" : "AGAWAM", "loc" : { "type": "int", "value": 16}}'
)
Вы получаете:
['city'] : AGAWAM
['loc', 'type'] : int
['loc', 'value'] : 16