1、遇到一个问题:android返回的基本都是标准的json格式,当我们想要对层层嵌套的json中找到自己想要的字段并进行校验时

难道需要一层一层的解析??

2、使用jsonpath

 list_3={'code':100,'result':{'nextpage':1,'page':3,'data':[{'id':111,'fid':12345,'username':'zhonghui','info':[{'id':'1_1','name':'哈哈'}]},{'id':222,'fid':56789,'username':'zhonghuih2','info':[{'id':'2_1','name':'嘿嘿'}]}]}};
#跟目录地址的写法思想一样,比如下面,根目录$下,点,找code这个字段,运行返回列表类型[100]
res_3=jsonpath.jsonpath(list_3,'$.code');
#比如下面,根目录$下,点,找result这个字段,运行返回列表类型[{'nextpage': 1, 'page': 3, 'data': '真实数据'}]
res_3=jsonpath.jsonpath(list_3,'$.result'); #比如下面,根目录$下,点,找nextpage这个字段,运行返回false,因为根目录下没有nextpage这个字段
res_3=jsonpath.jsonpath(list_3,'$.nextpage'); #那如果再加一个点,相当于再深一层路径,找nextpage,最终返回正确的[1]
#但不是加一个点就深一层?
res_3=jsonpath.jsonpath(list_3,'$..id'); #*:代表匹配所有元素节点
#比如下面。相当于匹配根节点下的所有元素,最终返回[100, {'nextpage': 1, 'page': 3, 'data': {'id': 111, 'fid': 12345, 'username': 'zhonghui'}}]
res_3=jsonpath.jsonpath(list_3,'$.*'); #[]:下标,迭代器,选择,因为选择出来的是list类型,list是可迭代类型,因此可以用[index]筛选
#比如下面,data选择出来的是一['zhonghuihong']
res_3=jsonpath.jsonpath(list_3,'$..data[0].username'); #多级筛选,data下的所有用户名,比如下面,必须要用两个点,最终结果:['zhonghuih', 'zhonghuih2']
res_3=jsonpath.jsonpath(list_3,'$..data..username'); #多级筛选,如果不同层级下都有id这个字段
# 比如下面,实际上会把子层级的id也返回回来[111, '1_1', 222, '2_1'],但是我只需要外层的id,这个还没解决
res_3=jsonpath.jsonpath(list_3,'$..data..id'); #换一个思路
#比如下面,选择第一项id,最终返回[222],如果使用循环,也能达到预期
res_3=jsonpath.jsonpath(list_3,'$..data[1].id') #还是上面
#比如下面,我多加了一个点,此时返回[222, '2_1'],说明匹配了第一项下的所有id,
#
res_3=jsonpath.jsonpath(list_3,'$..data[1]..id')
#比如最后一个,猜测运行思想:
在根目录(第一个点)下寻找data----没有找到
在根目录下一层(第二个点)寻找data----找到data,并返回data[1]
在data[1](第一个点)下寻找id-----找到了外层id
在data[1]下一层(第二个点)下寻找id----也找到了id,也一起打印出来 print(res_3);

python--json、jsonpath的更多相关文章

  1. python json、 pickle 、shelve 模块

    json 模块 用于序列化的模块 json,用于字符串 和 python数据类型间进行转换 Json模块提供了四个功能:dumps.dump.loads.load #!/usr/bin/env pyt ...

  2. python json、pickle

    文章部分转自:https://www.cnblogs.com/lincappu/p/8296078.html json:用于字符串和Python数据类型间进行转换pickle: 用于python特有的 ...

  3. python 数据提取之JSON与JsonPATH

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与 ...

  4. Python爬虫开发【第1篇】【Json与JsonPath】

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与 ...

  5. 七、数据提取之JSON与JsonPATH

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与 ...

  6. 【python接口自动化】- 使用json及jsonpath转换和提取数据

    前言 ​ JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它可以让人们很容易的进行阅读和编写,同时也方便了机器进行解析和生成,适用于进行数据交互的场景,比如 ...

  7. Python | JSON 数据解析(Json & JsonPath)

    一.什么是JSON? JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一 ...

  8. Python之数据序列化(json、pickle、shelve)

    本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...

  9. 【转】Python之数据序列化(json、pickle、shelve)

    [转]Python之数据序列化(json.pickle.shelve) 本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型 ...

  10. 【python 字典、json】python字典和Json的相互转换

    [python 字典.json]python字典和Json的相互转换 dump/dumps字典转换成json load/loadsjson转化成字典 dumps.loads直接输出字符 dump.lo ...

随机推荐

  1. mysql alter add 使用记录

    alter add命令用来增加表的字段. alter add命令格式:alter table 表名 add字段 类型 其他; 例如,在表MyClass中添加了一个字段passtest,类型为int(4 ...

  2. configure.*和Makefile.*之间的关系

    现在很多项目都在使用GUI编译器,Kdevelop\Eclipse等等,诚然它给我们提供了极大地便利,但我们仍需要简单了解编译的过程.本文旨在简单叙述由源码(*.cpp & *.h)经过编译得 ...

  3. Django 笔记(三)模版路径 ~ 静态引用

    1.模版路径: 在 settings,py 里的 TEMPLATES = [] 内添加一句代码拼接路径 'DIRS': [os.path.join(BASE_DIR, 'templates')] 有两 ...

  4. STM32L476应用开发之三:串行通讯实验

    在我们的项目需求中,有两个串口应用需求,一个是与炭氢传感器的通讯,另一个是与显示屏的通讯.鉴于此,我们需要实验串行通讯. 1.硬件设计 串行通讯一个采用RS232接口,另一个直接采用TTL方式.我们在 ...

  5. Oracle12c 从入门到精通(第二版) 闫红岩 金松河 编著

    声明:本文只是用于学习笔记使用.方便查询.若需要书本,请到书店购买. 本书封面 前言 第1章 Oracle数据库概述 1.1 Oracle数据库产品结构及组成 1.1.1 标准版 1.1.2 标准版 ...

  6. LeetCode(92):反转链表 II

    Medium! 题目描述: 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明:1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5-&g ...

  7. 字符串为空的比较 ==与equals() 区别(キ`゚Д゚´)!!基础很重要 !!!

    情况描述:我提交的代码,让老大审批了一次,讲真的,对于我来说受益匪浅,其中有一个印象很深的内容:一个字符串是否为空的判断,我以前敲代码一直都是这样写的,可是从来都没有意识到这个东西. 代码: if(s ...

  8. 【python】控制台输出颜色

    来源:http://www.cnblogs.com/yinjia/p/5559702.html 在开发项目过程中,为了方便调试代码,经常会向stdout中输出一些日志,默认的这些日志就直接显示在了终端 ...

  9. python(1):数据类型/string/list/dict/set等

    本系列文章中, python用的idle是spyder或者pycharm, 两者都很好用, spyder 是在anaconda 中的, 自带了很多包可以用, pycharm 只是个编译器, 没有很多包 ...

  10. poj2411 状态压缩-铺地板题型-轮廓线解法(最优)

    解法参考博客https://blog.csdn.net/u013480600/article/details/19569291 一种做法是先打出所有的状态,即满足上下配对的所有可能方案,然后再逐行进行 ...