python - 如何遍历 JSON 对象?
问题描述
我想遍历 Python 中的任意 JSON 对象并获取所有值。我不知道 JSON 对象是什么样的。我只想遍历所有元素。所以也通过子对象和列表。我现在从 Internet 上获取了一个任意 JSON 对象进行测试。但它也可以是任何其他 JSON 对象。目前我这样尝试:
def printJSONVals(json_object):
it = iter(json_object)
n = json_object[next(it)]
while n is not None:
print n
n = json_object[next(it)]
json_obj = json.loads('{ "city" : "AGAWAM", "loc" : [ -72.622739, 42.070206 ], "pop" : 15338, "state" : "MA", "_id" : "01001"}')
printJSONVals(json_obj)
不幸的是,这不起作用,因为我将列表"loc"
作为列表而不是单个值返回。有没有一种方法可以遍历 JSON 对象,而不管嵌套的深度如何,并始终将各个键的值存储在变量中n
?
因此,我希望变量n
始终包含键的值。无论对象嵌套的深度如何。所以我希望这里有这个输出:
AGAWAM
-72.622739
42.070206
15338
MA
01001
我想稍后将它们写在二维数组中。但这并不重要。如果我设法输出独立于嵌套的值就足够了。
我使用 Python 版本 2.7.17
谢谢
解决方案
好吧,您可以使用 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
推荐阅读
- android - gson.fromJson(getIntent().getStringExtra() 返回 null
- r - plot() - 轴上的编号消失了
- c++ - 是否可以查看当前正在运行的 boost 线程的数量?
- html - 单选按钮错误,允许多选
- jquery - 从页面抓取链接并滚动到主页上的锚点
- javascript - 意外的输出值即将到来
- html - 如何对齐段落的内容,使其在移动设备中看起来完美
- angular - 通过将特定条件放在数组对象上,在模板文件中显示特定值
- android - 如何像谷歌键盘安卓一样将英语音译成古吉拉特语
- flyway - 如何在生成构建时动态更改flyway sql脚本文件中的模式名称