python在json文件中查找指定数据,python获取json数据中某个字段
本文主要介绍了如何使用python提取JSON数据来指定内容,具有很好的参考价值。希望对大家有帮助。如有错误或不足之处,请不吝赐教。
00-1010如何提取JSON数据并指定内容。假设我们想获得 pic_str 中的数据。1.JSON数据是字符串类型。2.JSON数据是一种字典类型。如何提取复杂的JSON数据实例?解决方案api提取元素应用场景
目录
如何提取JSON数据指定内容
JSON数据
{err_no: 0, err_str: OK , pic _ id : 1169213517976400008 , pic_str: xoet , MD5 : ca 9 BC 4 FDA 521498 D2 B3 ABA 5 db B4 ee 4 AC }
假设我们要获取pic_str里的数据
导入json
str={err_no: 0, err_str: OK , pic _ id : 1169213517976400008 , pic_str: xoet , MD5 : ca 9 BC 4 FDA 521498 D2 B3 ABA 5 db B4 ee 4 AC }
json_str=str.replace( ,)
# json.loads(),它需要json字符串格式的必要双引号!转换为词典
json_dict=json.loads(dict2)
print(json_dict[pic_str])
xoet
1、JSON数据为字符串类型
导入json
json_dict={err_no: 0, err_str: OK , pic _ id : 1169213517976400008 , pic_str: xoet , MD5 : ca 9 BC 4 FDA 521498 D2 B3 ABA 5 db B4 ee 4 AC }
#方法1
print(json_dict[pic_str])
#或者使用print(json_dict.get(pic_str ))
#方法2 3360遍历
对于json_dict[pic_str}:中的pic
打印(图片)
2、JSON数据为字典类型
在越来越多的项目中,json基本都是作为接口数据返回的格式。Json给我们的感觉是很容易理解,但即使是复杂的结构也会比其他格式更容易阅读。但一旦在调试或测试中需要提取一些现场数据进行分析验证,就没那么容易了。本文使用python简单地获取复杂json数据中的字段信息。
如何提取复杂JSON的数据
如果有接口,返回的json信息如下:
{
familyName: 思想家家族,
家乡 : 广东省,
形成于2016年:号,
秘密基地 : 超级城市,
活动 :真,
家庭成员: [
{
姓名 : 职务,
年龄 : 35,
secretid entity : 1992238132345 ,
powers: [
抗辐射性,
变小,
辐射爆炸
]
},
{
姓名 : 詹姆斯:
年龄 : 37,
secretid entity : 8839394098124 ,
powers: [
百万吨冲床,
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"])
api 提取元素
import requestsurl = "http://ip-api.com/json"
response = requests.request("GET", url)
data = response.json()
extract_element_from_json(data, ["status"])
就是这么简单地使用了。
应用场景
通过这样的方式可以在什么场景下使用呢?
- 接口重构,需要校验接口中的部分字段数据
- 接口新增字段,只针对新增的字段进行提取校验
- 需要提取某一部分字段进行数据传递
以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。