jsonpath和Jmespath提取值

# jsonpath语法:
# $:根节点
# @:现行节点
# . [] 取子节点
# .. 相对节点,就是不管位置,
# * 匹配所有元素节点
# [] 支持过滤器操作?()
# jsonpath.jsonpath(obj, expr)传的obj参数是python的dict类型
import jsonpath
result={
    'a':1,
    'b':{
        'name':'yoyo'
    },
    'c':[{
        'name':'test',
        'qqq':'123'
    },
     {
        'name': 'test',
        'qqq': '123456'
    }
    ],
    'name':'test'

}
res=jsonpath.jsonpath(result,'''$.'a''') # $.a返回根节点下的a的值
print(res) # 返回一个list
res2=jsonpath.jsonpath(result,'''$..name''')
print(res2) # $..name,..为相对节点,查找根节点下的所有name的值
res3=jsonpath.jsonpath(result,'''$..[?(@.name=='test')]''') # 查找name==test的对象
print(res3)
res5=jsonpath.jsonpath(result,'$.c.*.name')
print(res5)
====================================================
D:\python36\python.exe D:/code/py_dev_test/py基础/jsonpath提取json数据.py
[1]
['test', 'yoyo', 'test', 'test']
[{'name': 'test', 'qqq': '123'}, {'name': 'test', 'qqq': '123456'}]
['test', 'test']

import jmespath
result_list={
    'code':1,
    'data':[
        {
            'name':'test1',
            'age':18
         },
        {
           'name':'test2',
            'age':19
        }
    ],
    'msg':'successful'
}

# jmespath.search(expression, data) ,参数分别为表达式,取值对象
# 1.code 根据key取值,表达式直接填key即可。
r1=jmespath.search('code',result_list)
print(r1)

# 2、取出data的第一组数据
r2=jmespath.search('data[0]',result_list)
print(r2)

# 3、取出data的所有数据
r3=jmespath.search('data[]',result_list)
print(r3)

# 4、按条件取数据
r5=jmespath.search('''data[?name=='test1']''',result_list)
print(r5)

r4=jmespath.search("(data[?age>=`18`])",result_list)

print(r4)
# 大于20岁的个数
r7=jmespath.search("length(data[?age>`20`])",result_list) #左上角的``

print(r7)
=====================================================================
D:\python36\python.exe D:/code/py_dev_test/py基础/jmespath提取json数据.py
1
{'name': 'test1', 'age': 18}
[{'name': 'test1', 'age': 18}, {'name': 'test2', 'age': 19}]
[{'name': 'test1', 'age': 18}]
[{'name': 'test1', 'age': 18}, {'name': 'test2', 'age': 19}]
0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值