我正在创建一个通用函数来处理任何以array或dict开头的json对象
我想知道是否有一种更优雅的方法使用生成器函数的yield/yield来实现同样的功能
jsonobj1 = {
'fruit':
{'Apples': 1}
}
jsonobj2 = [{
"fruitbasket": "fruitbasket1",
},
{
"fruitbasket2": "fruitbasket2",
"Apples": {
"Green": 1,
"Red": 2
},
}
]
jsonobj3 = [{
"fruitbasket": "fruitbasket1",
},
{
"fruitbasket2": "fruitbasket2",
"Apples": {
"Green": 1,
"Red": 2
},
"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对象
目前没有回答
相关问题 更多 >
编程相关推荐