繁体   English   中英

使用正则表达式从Python中的JSON响应中提取数据

[英]Using regex to extract data from JSON response in Python

我正在尝试使用Python中的正则表达式从JSON响应中提取字符串,但没有成功。

{"ao":["jskl|_xx2|020|b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===|true|900"]}

我想要的

b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA=== 

从字符串。 但是, | 在字符串中将不允许我使用我在Stack Overflow上看到的方法,因为它一直缺少| 我将不胜感激任何帮助。

在这里,你可以转义字符类中的特殊字符:

import re
text = '{"ao":["jskl|_xx2|020|b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===|true|900"]}'


match = re.search(r'[|]b.*===[|]', text).group()[1:-1]
print(match)

输出:

b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===

没有必要用正则表达式重新发明json.loads() 使用json.loads()将您的JSON字符串解析为字典,并通过索引到字典中来访问您感兴趣的字符串。 解压缩字符串后,拆分管道字符并访问列表的第三个索引:

your_json_dict_name["ao"][0].split("|")[3]

这是一个完整的例子:

import json

raw_json_str = r'{"ao":["jskl|_xx2|020|b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===|true|900"]}'
json_dict = json.loads(raw_json_str)

print(json_dict["ao"][0].split("|")[3])

输出:

b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===

好吧,对于初学者我不太明白你为什么不在这个字符串上使用json.loads,所以你可以将这个json称为地图并转到“ao”键,并在数组内的字符串上使用正则表达式。

但是把它放在一边,如果你仍然要从json中提取数据作为字符串,你可以在“|”上使用正则表达式组和一些转义(“\\”) 字符。

哪个看起来像这样:

?[\\“(。 ?\\ |){3}(。 ?)\\ |。

然后你可以访问第2组并得到你想要的结果,这总是让json看起来一样

如果“ao”属性上的数组有超过1个字符串,则不会获得第二个值。 因此我想建议先将这个字符串转换为map,然后自己循环每个字符串。

祝好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM