一.jsonpath:用来解析json数据
2.python处理json格式数据用到的函数
~~~~~
(1)json.dumps():将字典或列表转化为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)
~~~~~
(2)json.loads(): 将json格式字符串转化为python对象
案例:
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)
~~~~~
(3)json.dump():将字典或列表转化为json格式字符串并写入到文件中
案例:
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'))
~~~~~
(4)json.load():从文件中读取json格式字符串,转化为python对象
实例:
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格式字符串’)
~~~~~
eval(’(’ + 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
~~~~~
(3)JSONPath和XPath的对比
常用对比:
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)