python的jsonpath_Python爬虫——jsonpath(1)基础,python,jsonpath1,基础知识

一.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)

b63c2b79db8018638688f2e3837b781d.png

~~~~~

(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)

8889ff64713ef3bc1cfb735363353db2.png

~~~~~

(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'))

ddb31d0ab795d31a58d1be3c3f1a79f5.png

bc419c98b776be8ed10a0d3f936a744a.png

~~~~~

(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)

85298355f1036a163de1d989f5425fa2.png

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

/

$

表示根元素

.

@

当前元素

/

.

子元素

//

. .

任意位置查找

*

*

通配符

[]

?()

应用过滤表达式

fdd9dec1fc02040a1d00fba31647b7ff.png

XPath还有很多的语法(本地路径,操作符,和函数)没有列在这里。只要知道xpath和jsonpath脚本之中的不同点就行了。

[]在xpath表达式总是从前面的路径来操作数组,索引是从1开始。

使用JOSNPath的[]操作符操作一个对象或者数组,索引是从0开始。

a52ca3171d0ff27013e34ba2ed1de815.png

5.案例

(1) 案例一

:book中的所有的book作者

导入jsonpath模块

47705d83cbdf9a6c705fe8c94e757e3f.png

6a081aa4ba9a1dff37aa1963df0a4cb4.png

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

}

}

}

a92abf5a066dea1b5b528677ade94227.png

**(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)

183b5503285b10cb9159aca9359e4418.png

**(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)

cde0f5ec048642e64592609157dcce4a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值