如何解决任何JSON对象的Python遍历函数以获取所有键值
我正在创建一个通用函数来处理任何以数组或字典开头的 json 对象。以下工作遍历任何 json 对象并打印出每个键值。
我想知道是否有更优雅的方式使用生成器函数的 yield / yield 来实现相同的目标?
jsonobj1 = {
'fruit':
{'Apples': 1}
}
jsonobj2 = [{
"fruitbasket": "fruitbasket1",},{
"fruitbasket2": "fruitbasket2","Apples": {
"Green": 1,"Red": 2
},}
]
jsonobj3 = [{
"fruitbasket": "fruitbasket1","Bananas": ['Yellow','Green'],"Bananas": [
{"Brand": 3},{
"Chiquita": 3,"Stock": {
"Stockamount": 4,"Customer": "Supermarkets",}
}
]
}
]
def recursive_items(dictionary):
for key,value in dictionary.items():
if type(value) is dict:
yield from recursive_items(value)
else:
yield (key,value)
def kvpairs(jsonobj):
if isinstance(jsonobj,dict):
for key,value in recursive_items(jsonobj):
if type(value) is list:
for item in value:
if type(item) == dict:
for key,value in recursive_items(item):
print('{}={}'.format(key,value))
else:
print('{}={}'.format(key,value))
if isinstance(jsonobj,list):
for d in jsonobj:
for key,value in recursive_items(d):
if type(value) is list:
for i in value:
if type(i) == dict:
for key,value in recursive_items(i):
print('{}={}'.format(key,value))
else:
print('{}={}'.format(key,value))
kvpairs(jsonobj3)
输出:
fruitbasket=fruitbasket1
fruitbasket2=fruitbasket2
Green=1
Red=2
Brand=3
Chiquita=3
Stockamount=4
Customer=Supermarkets
还使用 python-benedict traverse 函数进行了测试,但这不适用于具有嵌套列表的 json 对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。