Python3 解析复杂结构的 json
它基于ECMAScript的一个子集,易于阅读和编写。
Python3 中可以使用json模块来对JSON数据进行编码。
d1=[{"id":1,"name":"Number1","age":11},{"id":2,"name":"Number2","age":22},{"id":"3","name":"Number3","age":33}]d2={"persons":[{"id":1,"name":"Number1","age":11},{"id":"2","name":"Number2","age":22},{"id":3,"name":"Number3","age":33}]}d3={"code":200,"persons":[{"id":1,"name":"Number1","age":11},{"id":True,"name":"Number2","age":22},{"id":3,"name":"Number3","age":33}]}
## 获取 json 数组或json 对象的 key 列表
defget_json_keys(json_str,json_keys=[]):ifisinstance(json_str,list):forjson_objinjson_str:forkeyinjson_obj.keys():ifkeynotinjson_keys:json_keys.append(key)elifisinstance(json_str,dict):forkeyinjson_str.keys():ifkeynotinjson_keys:json_keys.append(key)returnjson_keys
## 将json 数组中相同的 key - value值进行合并
defget_key_values(json_str,json_keys):target_json={}forkeyinjson_keys:key_values=[]forjson_objinjson_str:ifisinstance(json_obj,dict):key_values.append(json_obj[key])target_json[key]=key_valuesreturntarget_json
## 主方法
defanalyse_json(json_str):target_json={}json_keys=[]ifisinstance(json_str,list):json_keys=get_json_keys(json_str,json_keys)target_json=get_key_values(json_str,json_keys)elifisinstance(json_str,dict):json_keys=get_json_keys(json_str,json_keys)forkeyinjson_keys:ifnotisinstance(json_str[key],list)andnotisinstance(json_str[key],dict):target_json[key]=json_str[key]else:target_json[key]=analyse_json(json_str[key])returntarget_jsonprint(analyse_json(d1))print(analyse_json(d2))print(analyse_json(d3))
输出:
{'id':[1,2,'3'],'name':['Number1','Number2','Number3'],'age':[11,22,33]}{'persons':{'id':[1,'2',3],'name':['Number1','Number2','Number3'],'age':[11,22,33]}}{'code':200,'persons':{'id':[1,True,3],'name':['Number1','Number2','Number3'],'age':[11,22,33]}}
本文原创地址:https://www.linuxprobe.com/python3-parse-complex.html
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。