Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python json嵌套dict和list解码_Python_Json - Fatal编程技术网

python json嵌套dict和list解码

python json嵌套dict和list解码,python,json,Python,Json,我试图解析一个API调用的输出,它是一个json对象,具有嵌套的dict和list,深度未知。我看到了几个递归函数从嵌套的list/dict中获取键值的示例,但我也想获得结构正确性的具体顺序。例如: response = {'a': {'b': {'b1': 1, 'b2': 2}, 'c': [{'c1': 3,'c2': [{'x':55,'y':56},{'x':65,'y':66}]}, {'c1': 5

我试图解析一个API调用的输出,它是一个json对象,具有嵌套的dict和list,深度未知。我看到了几个递归函数从嵌套的list/dict中获取键值的示例,但我也想获得结构正确性的具体顺序。例如:

    response = {'a': {'b': {'b1': 1, 'b2': 2},
                'c': [{'c1': 3,'c2': [{'x':55,'y':56},{'x':65,'y':66}]},
                      {'c1': 5,'c2': [{'x':75,'y':76},{'x':85,'y':86}]}]
                   }
                 }

fun(response,"a-c-c2-x") should return [55,65,75,85]
fun(response,"a-b-b2") should return [2]
fun(response,"a-b2-b") should return []
到目前为止我所拥有的不起作用的东西:)


您可以使用类似的库,它实现了查询规范语言

基本编程示例:

from jsonselect import select

result = select(query, data)
更新:或者,您也可以使用funcy的函数

不要重新发明轮子;有许多好的现成解决方案

更新#2:鉴于您在下面的评论,这里有一个更易于理解和阅读的示例,可以让您在80%的过程中完成(无需使用递归,否则会导致堆栈崩溃!):


你有没有打算返回递归的结果?没有遵循?我有几个返回结果语句???哇,是的,它们都可以解决我的问题。我只是不想为一个功能安装整个第三方软件包。我会检查他们的代码,看看他们是如何实现的。看看我是否能弄明白:)谢谢。安装和重新使用第三方库有什么大不了的?这是测试自动化的一部分,它有自己的虚拟环境,正在部署100多台机器,通过空中更新等。整个函数库是400K。啊,我明白了;好的,看看我的更新回复。你将不得不调整/修改它以满足你的确切需求,但它应该能让你达到目的!我知道;但是实现您想要覆盖的所有边缘情况并不是一件小事;这就是为什么我将您链接到两个好的实现:
from jsonselect import select

result = select(query, data)
def query(data, path):
    elem = data
    try:
        for x in path.strip("/").split("/"):
            elem = elem.get(x)
    except:
        pass

    return elem