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