前言
之前在实际的项目研发中,需要对一些复杂的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
对应的值经过的第一条路径
正式使用
准备工作
- 导入jsonsearch包
from jsonsearch import JsonSearch
- 数据初始化
如果你导入的数据本来就是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,非常感谢。