在Python12期看到mongo女神在讲如何去提取json数据里面的有效字段,讲了2种方式,小白大神都通用,发来给大家观摩一下!
有一段数据存在load.txt里面,数据内容如下所示:
{
"status": 1,
"code": "10001",
"data": [
{
"id": "99274",
"createTime": "2018-12-19 16:52:22.0",
"payMemberId": "42332",
"incomeMemberId": "42332",
"amount": "999900.00",
"incomeMemberMoney": "-998839.67",
"payMemberMoney": "-998839.67",
"status": "1"
},
{
"id": "99264",
"createTime": "2018-12-19 16:50:52.0",
"payMemberId": "42332",
"incomeMemberId": "42332",
"amount": "100.00",
"incomeMemberMoney": "1060.33",
"payMemberMoney": "1060.33",
"status": "1"
},
{
"id": "99190",
"createTime": "2018-12-19 16:04:51.0",
"payMemberId": "42332",
"incomeMemberId": "0",
"amount": "30.00",
"incomeMemberMoney": null,
"payMemberMoney": "160.33",
"status": "0"
}
],
"msg": "获取用户流水记录成功!"
}
题目要求:提取数据内容里面的status=1的值,并统计次数。
方法一:最简单的字符串处理方法
with open('load.txt', 'r', encoding='utf-8') as fp: # 打开文件
financelog = json.load(fp) # 文件对象序列化成字典
datas = financelog['data'] # 获取data列表
flag = 0
for data in datas: # 遍历列表
if data['status'] == '1': # 判断是否等于1
flag += 1 # 统计status=1
print("status=1 的条数为:", flag)
那么这个方法的步骤是:先读取内容--再去序列化--再根据data这个 key获取相关内容--再去遍历列表--统计
看起来,是非常完美的一个解决方案,但是:学习就是为了寻找更优解!所以我们有了第二种方法:
方法二:利用正则处理
import re
# 使用正则解析 匹配并查找
financelog = open('loads.txt', 'r', encoding='utf-8').read() # 读取文件里面的内容并返回一个字符串
status = re.findall('"status": "1"', financelog) # 匹配在目标字符串中查找"status": "1"的内容,放到一个列表里面
print("status=1 的条数为:", len(status)) # 获取列表的长度就代表有多少条"status": "1"的数据
对于同一个题目,有2种解决方案,或许不止!
这就是学习的意义!
欢迎来到testingpai.com!
注册 关于