一.jsonpath:用来解析json数据
2.python处理json格式数据用到的函数
案例:
import json
lt = [
{'name': '王大明', 'age': '6'},
{'name': '王二明', 'age': '5'},
{'name': '王三明', 'age': '4'},
{'name': '王四明', 'age': '3'},
{'name': '王五明', 'age': '2'},
]
string = json.dumps(lt)
print(string)
案例:
import json
lt = [
{'name': '王大明', 'age': '6'},
{'name': '王二明', 'age': '5'},
{'name': '王三明', 'age': '4'},
{'name': '王四明', 'age': '3'},
{'name': '王五明', 'age': '2'},
]
string = json.dumps(lt)
obj = json.loads(string)
print(obj)
案例:
import json
lt = [
{'name': '王大明', 'age': '6'},
{'name': '王二明', 'age': '5'},
{'name': '王三明', 'age': '4'},
{'name': '王四明', 'age': '3'},
{'name': '王五明', 'age': '2'},
]
json.dump(lt, open('json.txt', 'w', encoding='utf8'))
实例:
import json
lt = [
{'name': '王大明', 'age': '6'},
{'name': '王二明', 'age': '5'},
{'name': '王三明', 'age': '4'},
{'name': '王四明', 'age': '3'},
{'name': '王五明', 'age': '2'},
]
obj = json.load(open('json.txt', 'r', encoding='utf8'))
print(obj)
3.前端处理
将json格式的字符串,转化为js对象
JSON.parse(‘json格式字符串’)
4.jsonpath学习
(1)JSONPath工具的问题
~~~~~ - 依赖某种特定的语言
~~~~~ - 需要依赖XPath 1.0
~~~~~ - 减少代码量和内存的消耗
~~~~~ - 在运行时
(2)JSONPath表达式
JSONPath 是参照,xpath表达式来解析xml文档的方式,json数据结构通常是匿名的并且不一定需要有根元素。JSONPaht 用一个抽象的名字$来表示最外层对象。
JOSNPath 表达式可以使用 . 符号如下:
$.store.book[0].title
或者使用[] 符号
$['store']['book'][0]['title']
从输入路径来看。内部或者输出的路径都会转化成-符号。
JSONPath 允许使用通配符 * 表示所以的子元素名和数组索引。还允许使用 ‘…’ 从E4X参照过来的和数组切分语法[start🔚step]是从ECMASCRIPT 4 参照过来的。
表达式在下面的脚本语言中可以使用显示的名称或者索引:
$.store.book[(@.length-1)].title
使用’@'符号表示当前的对象,?(<判断表达式>) 使用逻辑表达式来过滤。
$.store.book[?(@.price < 10)].title
常用对比:
xpath | jsonpath | Description |
/ | $ | 表示根元素 |
. | @ | 当前元素 |
/ | . | 子元素 |
// | . . | 任意位置查找 |
* | * | 通配符 |
[] | ?() | 应用过滤表达式 |
XPath还有很多的语法(本地路径,操作符,和函数)没有列在这里。只要知道xpath和jsonpath脚本之中的不同点就行了。
- []在xpath表达式总是从前面的路径来操作数组,索引是从1开始。
- 使用JOSNPath的[]操作符操作一个对象或者数组,索引是从0开始。
5.案例
(1) 案例一:book中的所有的book作者
- 导入jsonpath模块
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
}
}
}
**(2)案例二:**查找book下所有author
import jsonpath
import json
# 将json格式字符串转化为python对象
obj = json.load(open('bookstore.json', 'r', encoding='utf8'))
# 查找book下所有author
ret = jsonpath.jsonpath(obj, '$..author')
print(ret)
**(3)案例三:**查找store下所有节点
import jsonpath
import json
# 将json格式字符串转化为python对象
obj = json.load(open('bookstore.json', 'r', encoding='utf8'))
# 查找store下所有节点
ret = jsonpath.jsonpath(obj, '$.store.*')
print(ret)