前言

之前在实际的项目研发中,需要对一些复杂的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从url读取json python获取json的key和value_json