Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Parsing - Fatal编程技术网

Python 如何在深度嵌套的json文件中搜索所有出现的键?

Python 如何在深度嵌套的json文件中搜索所有出现的键?,python,json,parsing,Python,Json,Parsing,我希望能够使用json文件中的一个键来查找json文件中出现的所有特定json对象。例如,如果我有以下json块: { "FNMIP": 1, "FNMIT": 0, "FNMP": { "DP": { "DT": 0, "UF": true,

我希望能够使用json文件中的一个键来查找json文件中出现的所有特定json对象。例如,如果我有以下json块:

{
                  "FNMIP": 1,
                  "FNMIT": 0,
                  "FNMP": {
                    "DP": {
                      "DT": 0,
                      "UF": true,
                      "DF": "yyyyMMdd"
                    },
                    "FP": {
                      "FE": null
                    }
                  },
                  "IE": true,
                  "$": "PMF"
                }

我想搜索包含此键的所有json块,然后应用某种逻辑将其替换为另一个json对象。我不知道如何在Python中执行这些操作,因为我是Python新手。

如果我理解正确,您希望递归遍历嵌套的
dict
s,对于任何与特定值匹配的值,将其替换为其他值。这样做:

def recursive_replace(data,match,repl):
    for k,v in data.items():
        if v == match:
            data[k] = repl #replace the matched value
        elif isinstance(v,dict):
            recursive_replace(v,match,repl)
然后您可以将数据转换回json

要测试数据中是否存在
“$”
键,可以使用
中的
操作符:

def recursive_replace(data,repl):
    for k,v in data.items():
        if not isinstance(v,dict):
            continue
        elif "$" in v:
            data[k] = repl
        else:
            recursive_replace(v,repl)

那么,您想进行DFS搜索,当您找到匹配项时,将该对象附加到数组中?你只需要递归地遍历它。我想做深度优先搜索,我想做的是做一个DFS,当我发现该对象时,用一个新对象替换它,然后继续搜索以查找更多该类型的对象。你能提供一个示例数据和修改吗?你可能想研究一下,问题是当我看到像上面那样的json对象,如果“$”:“PMF”,那么就用一个新对象替换它?它是一个静态值,还是基于数据在全局中的位置确定的?您希望像
{“tadhg”:{“$”:“A”},“Ankit”:{“$”:“B”}}
这样的数据用结构中一级以上的键替换“$”键吗?因此,新数据类似于
{“tadhg”:{“tadhg”:“A”},“Ankit”:{“Ankit”:“B”}
No,因此如果我找到带有“$”:“A”的对象,那么我想用一个新字典替换可以作为字典的父对象,其中“$”是一个键,因此如果结构类似于{“X”:“S”,“V”:“{“$”:PFM},那么就用“{”P”:“A”替换它例如,我在答案中添加了,但我仍然不清楚这是否是你想要的。重置价值是如何定义的?如果你简单地用一个字典替换所有的值,它们最终都会成为对同一个对象的引用,你会遇到如下问题