前言

之前在实际的项目研发中,需要对一些复杂的json数据进行取值操作,由于json数据的层级很深,所以经常取值的代码会变成类似这样:

value = data['store']['book'][0]['title']

有的甚至会比这个更长,看起来特别不舒服,而且假如原始的数据发生了一个变化,你需要针对你的代码再做一个工作量不小的适配工作,非常不方便,所以我想能否可以快速的对一串json数据取到想要的key对应的value值呢?

经过一段尝试,终于成功的解决了这个问题,其实核心思想就是将取值过程流程化,代码其实很简单,我也已经将代码传到了github上了,地址在这里。

安装

为了更加能够让大家快速的使用代码的相关功能,我将代码上传到python库。

大家可以使用pip进行安装:

pip install jsonsearch

或者使用

pip install --index-url https://pypi.org/simple/jsonsearch

解决方案

测试数据

{"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}},"expensive": 10
}

功能介绍

当前程序主要有以下几个功能:

  • 查找key对应的所有值,比如查找上述数据中title对应的所有值
  • 查找key对应值的所有路径,比如取到title对应的值经过的所有路径
  • 查找key对应的第一个值,比如查找上述数据中title对应的第一个值
  • 查找key对应值的第一条路径,比如取到title对应的值经过的第一条路径

正式使用

准备工作

  1. 导入jsonsearch包
from jsonsearch import JsonSearch
  1. 数据初始化

如果你导入的数据本来就是json对象,那么采用如下的方式导入:

jsondata = JsonSearch(object=test_data, mode='j')

如果你导入的数据是字符类型对象,那么采用如下的方式导入:

jsondata = JsonSearch(object=test_data, mode='s')

其中的区别在于mode选项的值填写的不一样,其中j表示json对象,mode表示字符对象。

功能使用

1. 查找key对应的所有值

如果我们希望从案例数据中查找title对应的所有值,只需使用下面程序即可

jsondata.search_all_value(key='title')

得到的结果如下:

['Sayings of the Century', 'Sword of Honour', 'Moby Dick', 'The Lord of the Rings']

2. 查找key对应值的所有路径

如果我们希望从案例数据中查找title对应值的所有路径,只需使用下面程序即可

jsondata.search_all_path(key='title')

得到的结果如下:

[['store', 'book', 0, 'title'], ['store', 'book', 1, 'title'], ['store', 'book', 2, 'title'], ['store', 'book', 3, 'title']]

如果我们对路径进行遍历其实也能取到我们的值。

3. 查找key对应的第一个值

如果我们希望从案例数据中查找title对应的第一个值,只需使用下面程序即可

jsondata.search_first_value(key='title')

得到的结果如下:

'Sayings of the Century'

4. 查找key对应值的第一条路径

如果我们希望从案例数据中查找title对应值的第一条路径,只需使用下面程序即可

jsondata.search_first_path(key='title')

得到的结果如下:

['store', 'book', 0, 'title']

结语

以上就是当前jsonsearch的主要功能,后续的话会继续为其完善一些相应的功能,如果大家有需求的话,也欢迎在github上提issue,欢迎大家下载使用jsonsearch

如果对你有帮助的话,欢迎在github上点击一个star,非常感谢。

python中如何对复杂的json数据快速查找key对应的value值(使用JsonSearch包)相关推荐

  1. b是python文件二进制打开_如何在Python中打开和显示原始二进制数据?

    'rb'模式允许您从Python中的文件读取原始二进制数据:with open(filename, 'rb') as file: raw_binary_data = file.read() type( ...

  2. Android中怎获取json,Android应用中如何解析获取的json数据

    Android应用中如何解析获取的json数据 发布时间:2020-11-24 17:10:08 来源:亿速云 阅读:107 作者:Leah 这篇文章将为大家详细讲解有关Android应用中如何解析获 ...

  3. Python中通过索引名称提取数据loc()函数Python中通过行和列下标提取数据iloc()函数

    [小白从小学Python.C.Java] [Python全国计算机等级考试] [Python数据分析考试必会题] ● 标题与摘要 Python中通过索引名称提取数据 loc()函数 Python中通过 ...

  4. 在python中创建Excel文件并写入数据

    来源:<在python中创建Excel文件并写入数据> python中的包xlwt和xlsxwriter都是比较方便创建excel文件并写入数据的. xlwt中: 通过xlwt.Workb ...

  5. php json语法错误,在PHP json_decode()中检测到错误的json数据?

    在PHP json_decode()中检测到错误的json数据? 通过json_decode()解析时,我正在尝试处理错误的json数据. 我正在使用以下脚本: if(!json_decode($_P ...

  6. python保存列表到json_将json数据保存到python列表中时出现问题

    我试图同时从json数据中获取两个属性,并将它们作为项目添加到我的python列表中.但是,当尝试添加这两个时:['emailTypeDesc']['createdDate']它将引发错误.有人可以帮 ...

  7. 飘逸的python - 命令行漂亮的显示json数据

    之前做的一个脚本把信息用json格式存到文本中.这样的好处是简便,易编辑,并且拥有强大的表达能力. 不过从文本cat出来的是一堆很难看的字符串,没换行和缩进.这时候就在想,如果有个类似于IDE的格式化 ...

  8. python读取多行json_如何在Python中读取包含多个JSON对象的JSON文件?

    所以这是在python中读取JSON文件的标准方法 import json from pprint import pprint with open('ig001.json') as data_file ...

  9. Python爬虫项目:爬取JSON数据存储Excel表格与存储图片

    随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战.搜索引擎(Search Engine),例如传统的通用搜索引擎AltaVista,Yahoo!和Googl ...

最新文章

  1. 搭建Cocos Code IDE开发环境
  2. 网络最大流(SAP)模板
  3. 操作系统习题7—文件系统
  4. 云路由 vyatta 体验(一)基本设置
  5. 网页中弹出模式对话框
  6. stmmac 中断处理
  7. 爬动的蠕虫(C++)
  8. 归档-软考网规-存储部分-san-nas-das
  9. mysql查询某个字段数量最多_查询一个表某个字段中出现次数最多的那个数据的前30名...
  10. MySQL5.5.27使用Restore From SQL Dump功能导入数据库表中出现Row size too large
  11. 三种菜单控件的兼容性问题处理集锦
  12. Ubuntu18.04安装OpenCV4.3.0和环境配置(支持编译CUDA并安装配置python-opencv)
  13. JZ6-旋转数组的最小数字
  14. R语言 | 构建信用评分卡模型
  15. 树莓派端口i2s_树莓派制造低成本交互式显微镜
  16. VBS教程(入门级)
  17. 插件!最好用的翻译插件!!
  18. 吉林农业大学计算机类考研,吉林农业大学考研难吗?一般要什么水平才可以进入?...
  19. OpenCore 黑苹果安装教程
  20. 在内核中创建文件 filp_open/sys_open

热门文章

  1. OpenFeign服务接口调用
  2. 数据结构(01)— 算法复杂度概念及常见的复杂度计算
  3. LeetCode简单题之找出井字棋的获胜者
  4. LeetCode简单题之图像渲染
  5. 传统编译器与神经网络编译器
  6. CPU,GPU,Memory调度
  7. CVD和ALD薄膜沉积技术应用领域
  8. 人工智能芯片支持超低功耗器件的推理
  9. 2021年大数据常用语言Scala(十):基础语法学习 方法
  10. python 内置函数map的使用