Python怎么提取指定和复杂的JSON数据
Admin 2022-07-28 群英技术资讯 495 次浏览
JSON数据
{'err_no': 0, 'err_str': 'OK', 'pic_id': '1169213517976400008', 'pic_str': 'xoet', 'md5': 'ca9bc4fda521498d2b3aba5dbb4ee4ac'}
import json str = "{'err_no': 0, 'err_str': 'OK', 'pic_id': '1169213517976400008', 'pic_str': 'xoet', 'md5': 'ca9bc4fda521498d2b3aba5dbb4ee4ac'}" json_str = str.replace("'",'"') # json.loads() ,要求json串格式中必须的双引号!!转换为字典 json_dict = json.loads(dict2) print(json_dict['pic_str']) >> xoet
import json json_dict = {'err_no': 0,'err_str': 'OK', 'pic_id': '1169213517976400008', 'pic_str': 'xoet', 'md5': 'ca9bc4fda521498d2b3aba5dbb4ee4ac'} # 方法一 print(json_dict['pic_str']) # 或者使用 print(json_dict.get('pic_str')) # 方法二:遍历 for pic in json_dict['pic_str'}: print(pic)
在越来越多的项目中,基本都用了 json 作为接口数据返回的格式。json 给我们的感觉就是通俗易懂,只是即使再复杂的结构也会比其他格式容易看。然而一旦在调试或者测试中需要用到提取某一部分字段数据进行解析并校验的话,就没那么容易了。这篇文章使用 python 简单地获取到复杂 json 数据中的字段信息。
如果有一个接口返回的 json 信息如下:
{ "familyName": "thinker family", "homeTown": "广东省", "formed": 2016, "secretBase": "Super city", "active": true, "familyMembers": [ { "name": "Jobs", "age": 35, "secretIdentity": "1992238132345", "powers": [ "Radiation resistance", "Turning tiny", "Radiation blast" ] }, { "name": "James", "age": 37, "secretIdentity": "8839394098124", "powers": [ "Million tonne punch", "Damage resistance", "Superhuman reflexes" ] } ] }
这里就包含了对象,以及列表数据。对象中也包含列表数据。这应该是最基本的企业接口 json 格式了。
假如你要提取 json 中的 name 信息,最简单的方式就是
member = [ members.get('name') for members in data.get('familyMembers') ]
如果是要连续拿其他的信息,那么就需要换其他中获取方式,其实这种是比较麻烦的一种方法。
extract_element_from_json(data, ["familyMembers", "name"]) >> ['Jobs', 'James']
此函数根据 path 中指定的键嵌套到obj中的记录中以检索所需的信息。当遇到一个列表作为 path 中键的值时,此函数会拆分并以深度优先的方式继续嵌套在遇到的列表的每个元素上。这就是返回 ['Jobs', 'James'] 的方式;因为 familyMembers 的值是一个列表,所以嵌套在它的两个元素上被拆分,并且 name 的每个值都附加到输出列表中。
如果 obj 是单个字典/ json,则此函数返回包含所需信息的列表,如果 obj 是字典/ json 列表,则此函数返回包含所需信息的双重列表。
如果嵌套字典/ json 的相应级别缺少 path 的元素,则此函数返回 [None]。
完整代码如下:
def extract_element_from_json(obj, path): ''' 输入关键字,就可以将关键字的值信息存放在列表中并输出 如果关键字是对象名,则返回的对象字典信息到列表中 如果关键字是列表名,则返回的列表信息到列表中(返回双重列表) ''' def extract(obj, path, ind, arr): ''' 从一个嵌套的字典中提取一个元素,并返回到列表中。 params: obj - dict - 输入字典 params: path - list - 构成JSON路径的字符串列表 params: ind - int - 起始索引 params: arr - 列表 - 输出列表 ''' key = path[ind] if ind + 1 < len(path): if isinstance(obj, dict): if key in obj.keys(): extract(obj.get(key), path, ind + 1, arr) else: arr.append(None) elif isinstance(obj, list): if not obj: arr.append(None) else: for item in obj: extract(item, path, ind, arr) else: arr.append(None) if ind + 1 == len(path): if isinstance(obj, list): if not obj: arr.append(None) else: for item in obj: arr.append(item.get(key, None)) elif isinstance(obj, dict): arr.append(obj.get(key, None)) else: arr.append(None) return arr if isinstance(obj, dict): return extract(obj, path, 0, []) elif isinstance(obj, list): outer_arr = [] for item in obj: outer_arr.append(extract(item, path, 0, [])) return outer_arr
这段代码可以直接复制使用。
其中使用方法很简单如下:
extract_element_from_json(data, ["familyMembers", "name"])
import requests url = "http://ip-api.com/json" response = requests.request("GET", url) data = response.json() extract_element_from_json(data, ["status"])
就是这么简单地使用了。
通过这样的方式可以在什么场景下使用呢?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
大家都知道concat()函数可以沿着一条轴将多个对象进行堆叠,其使用方式类似数据库中的数据表合并,在使用merge()函数进行合并时,默认会使用重叠的列索引做为合并键,即取行索引重叠的部分,本文给大家介绍python 数据合并concat函数与merge函数,感兴趣的朋友一起看看吧
在本篇文章里小编给大家整理的是一篇关于Python对多个sheet表进行整合实例讲解内容,有兴趣的朋友们可以学习下。
结合网上教学内容,指向yield就是迭代器,如果对yield并理解,大家暂且可以把yield理解成“return”,其使用方法与return大致相同,但含义有区别
这个名为PyScript的框架,其核心目标是为开发者提供在标准HTML中嵌入Python代码的能力,使用 Python调用JavaScript函数库,并以此实现利用Python创建Web应用的功能,本文给大家介绍Python HTML运行的案例解析,感兴趣的朋友一起看看吧
这篇文章主要为大家介绍了python神经网络Xception模型复现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008