JSON的数据提取
1.学习目标
- 掌握JSON相关的方法(
load
,loads
,dump
,dumps
) - 了解JSONPath的使用(提取JSON中的数据)
2 复习什么是JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。
3 JSON模块中方法的学习
json.load()
: 从文件对象中读取JSON数据。json.loads()
: 从字符串中读取JSON数据。json.dump()
: 将Python对象写入文件对象,格式为JSON。json.dumps()
: 将Python对象转换为JSON格式的字符串。
4 JSONPath模块的学习
4.1 JSONPath介绍
JSONPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python,PHP 和 Java。
4.2 JsonPath 对于 JSON 来说,相当于 XPath 对于 XML。
安装方法:pip install jsonpath
官方文档:[JSONPath - XPath for JSON](http://goessner.net/articles/JsonPath)
4.3 JsonPath语法:
- 使用点符号
.
来表示当前对象。 - 使用方括号
[]
来表示数组索引或对象属性。 - 使用星号
*
作为通配符匹配所有成员名或数组索引。 - 使用
..
表示递归下降,从当前位置开始,遍历所有子元素。 - 使用
[start:end:step]
表示数组切片操作。
4.4 语法使用示例
book_dict = {
"store": {
"book": [
{ "category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
# ... 其他书籍信息
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
from jsonpath import jsonpath
print(jsonpath(book_dict, '$..author')) # 返回所有作者的列表
4.5 JSONPath表达式示例表
JSONPath | 结果 | 说明 |
---|---|---|
$.store.book[*].author | store 中的所有book 的作者 | 使用通配符* 匹配所有book 元素 |
$..author | 所有作者 | 使用.. 递归匹配所有author |
$.store.* | store 下的所有元素 | 使用点符号. 匹配所有直接子元素 |
$.store..price | store 中的所有内容的价格 | 使用双点.. 匹配所有嵌套价格 |
$..book[2] | 第三本书 | 数组索引从0开始,因此是第三本书 |
$..book[(@.length-1)] | $..book[-1:] | 最后一本书 | 使用脚本表达式或负索引 |
$..book[0,1] | $..book[:2] | 前两本书 | 使用数组切片或索引列表 |
$..book[?(@.isbn)] | 有ISBN的所有书 | 使用过滤器表达式匹配有ISBN属性的书 |
$..book[?(@.price<10)] | 价格小于10的所有书 | 使用过滤器表达式匹配价格 |
$..* | 获取所有数据 | 使用通配符匹配所有元素 |