json展开的python算法
以下是一个Python算法,用于展开JSON对象并将其转换为Python字典对象:
import json
def flatten_json(nested_json):
"""
将嵌套的JSON对象展开为Python字典对象
"""
# 初始化字典
flattened_dict = {}
def flatten(inner_json, name=''):
"""
递归函数,将嵌套的JSON对象展开为Python字典对象
"""
# 如果是字典对象
if type(inner_json) is dict:
for key in inner_json:
flatten(inner_json[key], name + key + '_')
# 如果是列表对象
elif type(inner_json) is list:
i = 0
for item in inner_json:
flatten(item, name + str(i) + '_')
i += 1
# 如果是其他类型对象
else:
flattened_dict[name[:-1]] = inner_json
# 调用递归函数
flatten(nested_json)
# 返回展开后的Python字典对象
return flattened_dict
使用示例:
# 嵌套的JSON对象
nested_json = {
'name': 'John Doe',
'age': 30,
'address': {
'street': '123 Main St',
'city': 'Anytown',
'state': 'CA',
'zip': '12345'
},
'phone_numbers': [
{
'type': 'home',
'number': '555-1234'
},
{
'type': 'work',
'number': '555-5678'
}
]
}
# 展开JSON对象为Python字典对象
flattened_dict = flatten_json(nested_json)
# 打印展开后的字典对象
print(json.dumps(flattened_dict, indent=4))
输出结果:
{
"name": "John Doe",
"age": 30,
"address_street": "123 Main St",
"address_city": "Anytown",
"address_state": "CA",
"address_zip": "12345",
"phone_numbers_0_type": "home",
"phone_numbers_0_number": "555-1234",
"phone_numbers_1_type": "work",
"phone_numbers_1_number": "555-5678"
}
原文地址: https://www.cveoy.top/t/topic/zbK 著作权归作者所有。请勿转载和采集!