python解析json数据的三种方式
·
目录
1、运用re、json、jsonpath包解析json思路
(1)re:正则表达式,通过json的形式对症下药,写表达式去解析json;
(2)json: 通过json中的json.loads()方法,将str类型转为dict类型,运用python字典的数据结构特点去解析json;
(3)jsonpath:对比与json包,jsonpath可以根据路径去解析json,比较适合用来解析json中带“[ ]”的数据。
2、三种方式的json解析案例
#json数据样式,本文采用带[]的数据样式
{
"version": "version 1.0.12",
"result": {
"pages": 1314,
"data": [
{
"name": "大明",
"IDcard": "440588190001015688",
"address": "广东省广州市天河区正佳广场99楼520号",
},
{
"name": "二明",
"IDcard": "440588190012317456",
"address": "广东省广州市天河区天环广场88楼520号",
}
]
}
}
(1)运用re正则表达式解析json
import re
jsondata={
"version": "23231cimesfedkk",
"result": {
"pages": 1314,
"data": [
{
"name": "大明",
"IDcard": "440588190001015688",
"address": "广东省广州市天河区正佳广场99楼520号",
},
{
"name": "二明",
"IDcard": "440588190012317456",
"address": "广东省广州市天河区天环广场88楼520号",
}
]
}
}
if __name__ == '__main__':
name_list=re.findall(r"'name': '(\w*)'",str(jsondata))
IDcard_list=re.findall(r"'IDcard': '(\w{18})'", str(jsondata))#身份证18位数字和字母组合
address_list=re.findall(r"'address': '(\w*)'", str(jsondata))#地址
print(name_list)
print(IDcard_list)
print(address_list)
运行结果:
['大明', '二明']
['440588190001015688', '440588190012317456']
['广东省广州市天河区正佳广场99楼520号', '广东省广州市天河区天环广场88楼520号']
(2)运用字典的数据结构性质解析json
import json
jsondata={"version": "23231cimesfedkk","result": {"pages": 1314,"data": [{"name": "大明","IDcard": "440588190001015688","address": "广东省广州市天河区正佳广场99楼520号",},{"name": "二明","IDcard": "440588190012317456","address": "广东省广州市天河区天环广场88楼520号",}]}}
if __name__ == '__main__':
# 若传入的数据为str类型需要将它转成dict类型
# result = json.loads(jsondata)
jsondata = jsondata["result"]["data"]
resultdata = jsondata
namelist=[]
idcardlist=[]
addresslist=[]
for data in resultdata:
namelist.append(data['name'])
idcardlist.append(data['IDcard'])
addresslist.append(data['address'])
print(namelist)
print(idcardlist)
print(addresslist)
运行结果:
['大明', '二明']
['440588190001015688', '440588190012317456']
['广东省广州市天河区正佳广场99楼520号', '广东省广州市天河区天环广场88楼520号']
(3)运用jsonpath的路径解析json
import jsonpath
jsondata={"version": "23231cimesfedkk","result": {"pages": 1314,"data": [{"name": "大明","IDcard": "440588190001015688","address": "广东省广州市天河区正佳广场99楼520号",},{"name": "二明","IDcard": "440588190012317456","address": "广东省广州市天河区天环广场88楼520号",}]}}
if __name__ == '__main__':
namelist=[]
idcardlist=[]
addresslist=[]
#运用jsonpath.jsonpath(字典数据, 路径)
namelist=jsonpath.jsonpath(jsondata, '$..name')
idcardlist=jsonpath.jsonpath(jsondata, '$..IDcard')
addresslist=jsonpath.jsonpath(jsondata, '$..address')
print(namelist)
print(idcardlist)
print(addresslist)
运行结果:
['大明', '二明']
['440588190001015688', '440588190012317456']
['广东省广州市天河区正佳广场99楼520号', '广东省广州市天河区天环广场88楼520号']
3、附录:re正则表达式语法

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)