python json解析_Python3 解析复杂结构的 json

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。

它基于ECMAScript的一个子集,易于阅读和编写。

Python3 中可以使用json模块来对JSON数据进行编码。

1577535796125625.jpg

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 列表

def get_json_keys(json_str,json_keys = []):

if isinstance(json_str,list):

for json_obj in json_str:

for key in json_obj.keys():

if key not in json_keys:

json_keys.append(key)

elif isinstance(json_str,dict):

for key in json_str.keys():

if key not in json_keys:

json_keys.append(key)

return json_keys

## 将json 数组中相同的 key - value值进行合并

def get_key_values(json_str,json_keys):

target_json = {}

for key in json_keys:

key_values = []

for json_obj in json_str:

if isinstance(json_obj,dict):

key_values.append(json_obj[key])

target_json[key] = key_values

return target_json

## 主方法

def analyse_json(json_str):

target_json = {}

json_keys = []

if isinstance(json_str,list):

json_keys = get_json_keys(json_str,json_keys)

target_json = get_key_values(json_str,json_keys)

elif isinstance(json_str,dict):

json_keys = get_json_keys(json_str,json_keys)

for key in json_keys:

if not isinstance(json_str[key],list) and not isinstance(json_str[key],dict):

target_json[key] = json_str[key]

else:

target_json[key] = analyse_json(json_str[key])

return target_json

print(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]}}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值