jsonpath介绍与使用
文章目录
- 1 JSON基础知识
- 1.1 什么是JSON
- 1.2 JSON数据格式
- 1.3 JSON的优缺点
- 2 什么是jsonpath
- 3 拓展
- 4 jsonpath解析json数据
- 4.1 安装jsonpath
- 4.2 xpath与jsonpath语法对比
- 4.3 示例
1 JSON基础知识
1.1 什么是JSON
JSON全称JavaScript Object Notation(JS对象标记),是一种轻量级的数据交换格式。它相对于XML更小,更易于人阅读和编写,同时也易于机器解释和生存,并有效地提高网络传输效率。
1.2 JSON数据格式
JSON数据的书写格式是:key:value 键/值对。比如:“Name”: “May”
JSON值可以是:
JSON值类型 | 举例 |
---|---|
数字(整数或浮点数) | “status_code”: 200 |
字符串(在双引号中) | “Name”: “Json” |
逻辑值(true或false) | “result”: true |
数组(在方括号中) | “user”: [“Linda”, “David”, “John”] |
对象(在花括号中) | “datas”: {“firstName”: “John”, “lastName”:“Doe”} |
null | “response”: null |
1.3 JSON的优缺点
优点
数据体积小,轻量级的数据交换
程序员编写更加容易
相对于XML,JSON不需要考虑子父节点,更易于机器的解析和生成
JSON支持多种编程语言:Java, JavaScript, PHP, Python, C, C#等缺点
语法上过于严谨
代码对数据的描述性差
代码不易读
2 什么是jsonpath
jsonpath为json文档提供了解析能力,通过使用jsonpath,你可以方便的查找节点、获取想要的数据,jsonpath是json版的xpath,正如xpath之于XML文档一样。
3 拓展
python处理json格式所使用的函数
函数 说明 json.dumps() 将字典或者列表转换为json格式的字符串 json.loads() 将json格式字符串转换为python对象 json.dump() 将字典或者列表转换为json格式的字符串并且写入到文件中 json.load() 从文件中读取json格式的字符串并且转换为python对象 示例:
import jsonlst = [{'name': 'Bob'},{'name': 'Tina'},{'name': 'John'},{'name': 'Daisy'},{'name': 'Kelly'}, ] # 将字典或者列表转换为json格式的字符串。 json2Str = json.dumps(lst) print(json2Str)# 将json格式字符串转换为python对象。 jsonStr2PythonObj = json.loads(json2Str) print(jsonStr2PythonObj)# 将字典或者列表转换为json格式的字符串并且写入到文件中。(Data/python_json.txt为已存在的文件路径) json.dump(lst, open('Data/python_json.txt', 'w', encoding='utf-8'))# 从文件中读取json格式的字符串并且转换为python对象。 obj = json.load(open('Data/python_json.txt', 'r', encoding='utf-8')) print(obj)
运行结果如下:
4 jsonpath解析json数据
4.1 安装jsonpath
pip install jsonpath
4.2 xpath与jsonpath语法对比
xpath | jsonpath | 说明 |
---|---|---|
/ | $ | 根节点 |
. | @ | 当前节点 |
/ | . or [] | 子节点 |
… | - | 父节点,jsonpath不支持 |
// | … | 递归匹配所有子节点 |
* | * | 通配符,匹配所有元素节点 |
@ | - | 匹配属性,jsonpath不支持此操作符,因为json是个key-value递归结构,不需要属性访问 |
[] | [] | 下标运算符,根据索引获取元素,xpath索引从1开始,jsonpath索引从0开始 |
| | [,] | 连接操作符,将多个结果拼接成数组返回,可以使用索引或别名 |
- | [start: end:step] | 数组分隔符,xpath不支持 |
[] | ?() | 过滤表达式 |
- | () | 脚本表达式,使用在底层脚本引擎下面,xpath不支持 |
() | - | xpath分组,jsonpath不支持 |
注意:jsonpath的索引从0开始计数。
4.3 示例
先创建一个books.json文件:
{"store": {"book": [{"category": "reference","author": "Nigel Rees","title": "Sayings of the Century","price": 8.95},{"category": "fiction","author": "Evelyn Waugh","title": "Sword of Honour","price": 12.99},{"category": "fiction","author": "Herman Melville","title": "Moby Dick","isbn": "0-553-21311-3","price": 8.99},{"category": "fiction","author": "J. R. R. Tolkien","title": "The Lord of the Rings","isbn": "0-395-19395-8","price": 22.99}],"bicycle": {"color": "red","price": 19.95}}
}
解析books.json文件的:
# jsonpath_demo.pyimport json
import jsonpath# 从Data/books.json文件中读取json格式的字符串并且转换为python对象
obj = json.load(open('Data/books.json', 'r', encoding='utf-8'))# 获取所有书的作者
authors = jsonpath.jsonpath(obj, '$.store.book[*].author')
print(authors)# 获取所有的作者
authors= jsonpath.jsonpath(obj, '$..author')
print(authors)# 获取store的所有元素。所有的book和bicycle
store_elements = jsonpath.jsonpath(obj, '$.store.*')
print(store_elements)# 获取store里面的所有东西的price
prices = jsonpath.jsonpath(obj, '$.store..price')
# prices = jsonpath.jsonpath(obj, '$..price')
print(prices)# 获取第三本书的title
book3 = jsonpath.jsonpath(obj, '$..book[2].title')
print(book3)# 获取最后一本书的title
# book_last = jsonpath.jsonpath(obj, '$..book[(@.length-1)]')
book_last = jsonpath.jsonpath(obj, '$..book[-1:].title')
print(book_last)# 获取前面的两本书的title
# book_top2 = jsonpath.jsonpath(obj, '$..book[0,1]')
book_top2 = jsonpath.jsonpath(obj, '$..book[:2].title')
print(book_top2)# 过滤出所有的包含isbn的书
book_isbn = jsonpath.jsonpath(obj, '$..book[?(@.isbn)]')
print(book_isbn)# 过滤出价格低于10的书的title。
book_priceUnder10 = jsonpath.jsonpath(obj, '$..book[?(@.price<10)].title')
print(book_priceUnder10)# 获取book节点中category为reference的书的title
book_fiction = jsonpath.jsonpath(obj, '$.store.book[?(@.category=="reference")].title')
print(book_fiction)# 获取所有元素。
all = jsonpath.jsonpath(obj, '$.*')
print(all)
jsonpath介绍与使用相关推荐
- python的jsonpath_python 提取json数据的jsonPath介绍及简单使用
为什么要用jsonpath 就跟为什么要用xpath一样,jsonpath的设计灵感来源于xpath.一个强大的json数据提取工具.让用户不用编写脚本就可以提取到相应的json数据. jsonpat ...
- 【Json】JSONPath之fastJson与Snack3的使用介绍与区别
文章目录 1.概述 2. JSONPath介绍 2.1. API 2.3. 支持语法 2.4. 语法示例 2.5. API 示例 2.5.1 例1 2.5.2 例2 2.5.3 例3 2.5.4 例4 ...
- Python 中使用 jsonpath
JSONPath 解析 JSON 内容详解(翻译自 github):https://blog.csdn.net/freeking101/article/details/103048514 JSONPa ...
- Python深层解析json数据之JsonPath
我们在做接口自动化时,一般接口响应的都是json数据体,对响应数据进行提取使用或断言,当数据量很大或层级很深时,就会变得很麻烦,于是就可以用到jsonpath模块,解决json路径深取值难的问题. 一 ...
- python的json中方法以及jsonpath模块
什么是json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景 ...
- fastjson php,Fastjson JSONPath
1. JSONPath介绍 fastjson 1.2.0之后的版本支持JSONPath.这是一个很强大的功能,可以在java框架中当作对象查询语言(OQL)来使用. 2. API package co ...
- jsonpath使用
1.jsonpath介绍: 首先,JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java. ...
- Python接口自动化之接口依赖
VOL 129 28 2020-05 今天距2021年216天 这是ITester软件测试小栈第129次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 ...
- python之json格式数据的提取
1. json的概念: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交 ...
最新文章
- 用 JS 做一个数独游戏(二)
- InfoPath开发
- Shell中的常用操作
- nginx 如何显示真实ip
- ajax get请求_JSP中的对讲机Ajax简述
- 跟我一起学.NetCore之Options实例演示及分析
- springboot使用curator实现服务的注册和发现
- 为什么有了scanf还要getchar()
- js去掉所有html标记
- Windows 7 with SP1中英文原版MSDN下载汇总
- 苹果绕id工具_绕ID教程(iOS13.313.3.1)
- 【PowerDesigner】PowerDesigner的下载及安装
- 雷达系统概述--距离分辨率
- java接收二进制数据,java接口接收二进制流
- jsp怎样写一个Button onclick事件
- [转载]1986年吴图南 马岳梁 吴英华 孙剑云等名家大師
- C++裁剪图像并填充
- MAVEN5分钟入门
- 倒排表数据结构、通配符查询、拼写纠正详解
- 计算机考试记不住题目,驾考科目一口诀,科一题目太多记不住?快来看看这些技巧...