You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python递归解析JSON无法定位目标键'five'问题排查

递归解析JSON无法定位'five'键的问题排查

测试用JSON结构:

{
    "one": "one",
    "two": {
        "three": "three",
        "four": [{
            "five": {
                "six": "six"
            }
        }]
    }
}

原Python代码:

json_file_path = r"\\filepathto\\testing.json"
j = json.load(open(json_file_path, 'r', 'utf-8-sig'))
def dict_opener(j):
    if isinstance(j, dict):
        for key, value in j.items():
            if isinstance(value, list):
                list_opener(j)
            if isinstance(value, dict) and key == "five":
                print("found")
            elif isinstance(value, dict):
                dict_opener(value)

def list_opener(j):
    for i in j:
        if isinstance(i, list):
            list_opener(i)
        elif isinstance(i, dict):
            dict_opener(i)


dict_opener(j)

问题原因分析

  1. 列表处理传参错误:在dict_opener中,判断value是列表时,调用list_opener(j)传递的是当前字典j而非实际的列表value。list_opener遍历字典的字符串键,完全碰不到嵌套在列表里的目标字典,导致five永远不会被解析到。
  2. 目标键判断逻辑有局限:原代码仅在value是字典时才判断键是否为five,但即使传参正确,列表内的字典需要先被list_opener传递给dict_opener才能触发判断,而传参错误直接阻断了这个流程。

修正后的代码

json_file_path = r"\\filepathto\\testing.json"
j = json.load(open(json_file_path, 'r', 'utf-8-sig'))

def dict_opener(obj):
    if isinstance(obj, dict):
        for key, value in obj.items():
            if isinstance(value, list):
                list_opener(value)  # 修正:传递实际的列表对象
            elif isinstance(value, dict):
                dict_opener(value)
            # 直接判断当前键是否为目标,无需绑定value类型
            if key == "five":
                print("找到five,内容为:", value)

def list_opener(obj):
    for item in obj:
        if isinstance(item, list):
            list_opener(item)
        elif isinstance(item, dict):
            dict_opener(item)

dict_opener(j)

修正说明

  • 修复list_opener的传参问题,确保列表内的元素能被正确遍历解析。
  • 调整key == "five"的判断位置,只要遍历到目标键就触发,同时直接输出five对应的完整内容,满足需求。

内容的提问来源于stack exchange,提问作者tlars25

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:10:39