Python 递归被调用两次

问题描述 投票:0回答:1

我正在从 json 字符串中的“text”键中提取值,但可以看到递归调用发生了两次并获得了输出两次。添加了多个打印语句以用于调试目的。

在调试重复调用两次的 process_data 方法时需要帮助。

def process_data(obj, content):
    # texts = []
    print("inside process data", obj)
    if isinstance(obj, dict):
        for key, value in obj.items():
            print("key",key)
            if key == "textValue":
                print("processing textValue")
                textval_str = json.dumps(value)
                textval = json.loads(textval_str)
                print("textVal", textval)
                process_data(textval, content)
            if key == "text":
                print("processing text", value)
                content.append(value)
                return
            else:
                process_data(value, content)
    elif isinstance(obj, list):
        print("list")
        for item in obj:
            process_data(item, content)
    return content

def from_adf(x):
    try:
        if x is not None:            
            cont = []
            adf_text = process_data(x, cont)
            print(len(cont))
            return adf_text
        else:
            return None
    except Exception as e:
        print(e)
        return x

if __name__ == '__main__':
    print(1)
    json_str = '''{"textValue": "{\"type\":null,\"content\":[{\"content\":[{\"type\":\"text\",\"text\":\"PAAT \"}]}]}"}'''
    op =  json_str.replace('"{', '{').replace('}"', '}').replace('\\"', '\\\\\\"')
    opls = json.loads(op, strict=False)
    output = from_adf(opls)
    print(output)
python json recursion
1个回答
0
投票

除了

json_str
不是有效的 JSON 之外(可能是您在发表这篇文章时误解了转义在字符串文字中的工作原理),重复调用的问题位于您的
if..else
链中:

            if key == "textValue":
                ...
            if key == "text":
                ...
            else:

这意味着当第一个

else
块被执行时,最后一个
if
块也将被执行。这不是你想要的。更改为:

            if key == "textValue":
                ...
            elif key == "text":
                ...
            else:
© www.soinside.com 2019 - 2024. All rights reserved.