Python2.7:加载JSON文件搜索值,替换它,并另存为新JSON

Python2.7:加载JSON文件搜索值,替换它,并另存为新JSON,json,python-2.7,search,recursion,load,Json,Python 2.7,Search,Recursion,Load,正如标题中提到的,我正在尝试制作一个简单的py脚本,它可以从终端运行,以执行以下操作: 查找当前工作目录和嵌套文件夹中的所有JSON文件(此部分工作正常) 加载所说的文件 递归地搜索特定值或子字符串 如果值匹配,则将其替换为用户建立的新值 完成后,将所有修改的json文件保存到当前目录中的“转换”文件夹中 也就是说,问题是当我尝试下面发布的递归搜索方法时,因为我对python非常陌生,所以我非常感谢在这个问题上提供的任何帮助,我认为这是。。。或者是我正在使用的json文件,或者是我正在使用的

正如标题中提到的,我正在尝试制作一个简单的py脚本,它可以从终端运行,以执行以下操作:

  • 查找当前工作目录和嵌套文件夹中的所有JSON文件(此部分工作正常)
  • 加载所说的文件
  • 递归地搜索特定值或子字符串
  • 如果值匹配,则将其替换为用户建立的新值
  • 完成后,将所有修改的json文件保存到当前目录中的“转换”文件夹中
也就是说,问题是当我尝试下面发布的递归搜索方法时,因为我对python非常陌生,所以我非常感谢在这个问题上提供的任何帮助,我认为这是。。。或者是我正在使用的json文件,或者是我正在使用的搜索方法

简化问题,我搜索的值永远不会与对象内部的任何内容匹配,无论是键还是纯字符串值。尝试了多个方法执行递归搜索,但无法获得匹配项

例如:考虑到示例json,我想替换结构“1h_mod310_door_00”中的值“selective_parts”或“static_parts”,甚至更深层的值,但我的搜索方法似乎无法在“object[object][children][0][children 5][name]中达到该值(希望这有所帮助)

示例JSON:()



问题是我导航json obj的方式,因为该方法没有考虑它是dict还是列表(我相信…)

为了回答我自己的问题,这里是我用来检查值的递归搜索:

def get_recursively(search_dict, field):
    """
    Takes a dict with nested lists and dicts,
    and searches all dicts for a key of the field
    provided.
    """
    fields_found = []

    for key, value in search_dict.iteritems():

        if key == field:
            print value
            fields_found.append(value)

        elif isinstance(value, dict):
            results = get_recursively(value, field)
            for result in results:
                if SEARCH_KEY in result:
                    fields_found.append(result)

        elif isinstance(value, list):
            for item in value:
                if isinstance(item, dict):
                    more_results = get_recursively(item, field)
                    for another_result in more_results:
                        if SEARCH_KEY in another_result:
                            fields_found.append(another_result)

    return fields_found
    # write_file(js_file, js_file_name)

希望这对某人有所帮助。

您似乎遗漏了一些单词。问题是什么?我将编辑这个问题,但简单地说,问题是当我从加载的json文件中搜索对象,并尝试将该值与搜索参数匹配时,它从不匹配。我可以导航和打印对象,但该值与要搜索的参数从不匹配。
def get_recursively(search_dict, field):
    """
    Takes a dict with nested lists and dicts,
    and searches all dicts for a key of the field
    provided.
    """
    fields_found = []

    for key, value in search_dict.iteritems():

        if key == field:
            print value
            fields_found.append(value)

        elif isinstance(value, dict):
            results = get_recursively(value, field)
            for result in results:
                if SEARCH_KEY in result:
                    fields_found.append(result)

        elif isinstance(value, list):
            for item in value:
                if isinstance(item, dict):
                    more_results = get_recursively(item, field)
                    for another_result in more_results:
                        if SEARCH_KEY in another_result:
                            fields_found.append(another_result)

    return fields_found
    # write_file(js_file, js_file_name)