Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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键_Python_Json_Nested_Key - Fatal编程技术网

Python 如何收集线性列表中的嵌套json键

Python 如何收集线性列表中的嵌套json键,python,json,nested,key,Python,Json,Nested,Key,我正在处理大型嵌套json,需要收集所有要列出的json键, i、 e: 对于json: {"taxIncludedAmount":{},"impactingPriceParameter":[{}],"extensions":{"additionalProp1":{}}}} 我想收集列表的钥匙, 加上括号,这样我就知道钥匙的类型了。 因此,对于上述json,我希望得到(包括正确的顺序): 我使用找到的一些代码示例

我正在处理大型嵌套json,需要收集所有要列出的json键, i、 e:

对于json:

{"taxIncludedAmount":{},"impactingPriceParameter":[{}],"extensions":{"additionalProp1":{}}}}

我想收集列表的钥匙, 加上括号,这样我就知道钥匙的类型了。 因此,对于上述json,我希望得到(包括正确的顺序):

我使用找到的一些代码示例获取所有密钥, 但是很难找到一种方法来为dic添加括号{},为list添加括号[]

代码:

输出:


event.dataStrategy
event.error.characteristics.name
event.error.code
eventType

这是“差不多了,我需要添加括号({}表示dic,[]表示数组) 此外,我想得到它的排序,所以第一级的对象将首先显示

更新:

谢谢@blhsing-它解决了括号, 出于某种原因,它跳过了示例中的空键

 "impactingPriceParameter": [
    {}
  ]

or 
  "extensions": {
    "additionalProp1": {}
  }

根据值
v
的数据类型,您可以简单地将
'{}'
'[]'
连接到键
k

def get_keys(d, curr_key=[]):
    for k, v in d.items():
        if isinstance(v, dict):
            yield from get_keys(v, curr_key + [k + '{}'])
        elif isinstance(v, list):
            for i in v:
                yield from get_keys(i, curr_key + [k + '[]'])
        else:
            yield '.'.join(curr_key + [k])

非常感谢,非常准确:)对于排序部分,是否有方法对输出进行排序,以便最高级别的键首先显示?不客气。要首先生成最高级别的键,应使用广度优先搜索(使用基于队列的实现),而不是深度优先搜索(使用递归)。请先尝试一下,如果遇到问题,请问一个新问题。如果您想用一种简单(但效率较低)的方法在DFS之后对列表进行排序,只需按每个字符串中的点数对列表进行排序。使用bfs意味着我首先需要对dict键进行排序,然后调用get_keys函数?
 "impactingPriceParameter": [
    {}
  ]

or 
  "extensions": {
    "additionalProp1": {}
  }
def get_keys(d, curr_key=[]):
    for k, v in d.items():
        if isinstance(v, dict):
            yield from get_keys(v, curr_key + [k + '{}'])
        elif isinstance(v, list):
            for i in v:
                yield from get_keys(i, curr_key + [k + '[]'])
        else:
            yield '.'.join(curr_key + [k])