Python3之jsonpath使用和json转换
jsonpath使用和json转换
(一)JSONPath-JSON的XPath
- JSONPath表达式始终以与XPath表达式与XML文档结合使用的相同方式引用JSON结构。由于JSON结构通常是匿名的,并且不一定具有“根成员对象”,因此JSONPath假定$分配给外部对象的抽象名称。[摘自官方文档]
- JSONPath表达式可以使用点号-表示法:$.store.book[0].title
- 括号符号:$[‘store‘][‘book‘][0][‘title‘]
- JSONPath允许通配符 *表示成员名称和数组索引
部分语法(够用)
jsonpath | 描述 |
---|---|
$ | 根元素 |
@ | 当前对象元素 |
. | 子元素 |
.. | 递归下降(所有元素) |
* | 通配符 |
安装jsonpath库
pip install jsonpath
准备json数据
json_data = { "code": 0, "message": "0", "ttl": 1, "data": { "isLogin": True, "email_verified": 0, "face": "http://i1.hdslb.com/bfs/face/17061e541785832b44426c51429ddfee39.jpg", "level_info": { "current_level": 0, "current_min": 0, "current_exp": 0, "next_exp": 1 }, "mid": 377206, "mobile_verified": 1, "money": 0, "moral": 70, "official": { "role": 0, "title": "", "desc": "", "type": -1 }, "officialVerify": { "type": -1, "desc": "" }, "pendant": { "pid": 0, "name": "", "image": "", "expire": 0 }, "scores": 0, "uname": "洒脱喽", "vipDueDate": 0, "vipStatus": 0, "vipType": 0, "vip_pay_type": 0, "vip_theme_type": 0, "wallet": { "mid": 377206, "bcoin_balance": 0, "coupon_balance": 0, "coupon_due_time": 0 }, "has_shop": False, "shop_url": "", "allowance_count": 0, "answer_status": 1 } }
导包
import jsonpath
使用
1、获取data节点下的所有数据
普通取值方式
datas = json_data["data"] for data in datas.items(): print(data)
使用jsonpath取值
# 返回的是一个数组 datas = jsonpath.jsonpath(json_data, "$.data") for data in datas[0].items(): print(data)
2、获取json数据中的uname
# 普通取值需要先看json数据,找到uname节点,如果没有就会报错 data1 = json_data["data"]["uname"] print(data1) # jsonpath取值不需要看json数据,直接通过..(..就表示全局检索后面跟的属性)全局搜索uname属性,如果没有返回FALSE data2 = jsonpath.jsonpath(json_data, "$..uname") print(data2)
3、获取json数据中所有的mid(使用普通的取值只能一个一个获取)
datas = jsonpath.jsonpath(json_data, "$..mid")
(二)json转换
- **不能使用dict将json字符串转换为字典
- **不能使用eval将json字符串转换为字典,json中的null在python中无法识别,会当成变量处理
- loads():将json字符串转换为python类型的,或自动将null转换为None
- dumps():将python类型的数据转换为json字符串,会自动将None转换为null
json库是Python3自带的库,直接导入使用
import json
准备一个字典和一个json字符串
data = {"name": "ming", "id": 18, "msg": None} json_data = '{"name":"Tom","id":19,"msg":null}'
使用loads()将json字符串转换为python类型的,或自动将null转换为None
res = json.loads(json_data) print(res, type(res))
使用dumps()将python类型的数据转换为json字符串,会自动将None转换为null
res = json.dumps(data) print(res, type(res))
【完】
相关推荐
sailxu00 2020-06-21
somebodyoneday 2020-06-01
adonislu 2020-05-29
fengchao000 2020-05-07
AngelaDan 2020-01-07
四叶草 2019-12-25
fengchao000 2019-12-12
GhostLWB 2019-12-10
baijinswpu 2019-12-09
somebodyoneday 2019-12-06
yigeng 2016-08-10
咸鱼的星空 2015-04-07
chinewwen 2018-08-17
MYSQL轻松学 2018-08-21
youmianzhou 2018-07-31
Yugi000 2013-11-18
忘 2014-03-10
张明云的知识共享 2018-05-29
张明云的知识共享 2018-05-29