在Python中解析JSON:如何在更改格式后让has_key()再次运行?

I Z*_*I Z 2 python unicode json

我有以下Python代码块:

data = json.loads(line)
if data.has_key('derivedFrom'):
     dFin = data['derivedFrom']
     if dFin.has_key('derivedIds'):
Run Code Online (Sandbox Code Playgroud)

这曾经在JSON块上正常工作,如下所示:

"derivedFrom": {"source": "FOO", "model": "BAR", "derivedIds": ["123456"]}
Run Code Online (Sandbox Code Playgroud)

现在格式改为:

"derivedFrom": "{\"source\": \"FOO.\", \"model\": \"BAR\", \"derivedIds\": [\"123456\"]
Run Code Online (Sandbox Code Playgroud)

因此,Python块中的最后一行会引发以下异常:

'unicode' object has no attribute 'has_key'
Run Code Online (Sandbox Code Playgroud)

有没有办法预处理JSON has_key再次工作?

bob*_*nce 10

"{\"source\": \"FOO.\", \"model\": ...
Run Code Online (Sandbox Code Playgroud)

是JSON字符串文字中的JSON对象.要获得内部JSON的属性,您必须再次解码它.

data = json.loads(line)
if 'derivedFrom' in data:
    dFin = json.loads(data['derivedFrom'])
    if 'derivedIds' in dFin:
        ....
Run Code Online (Sandbox Code Playgroud)

JSON-in-JSON通常是一个错误,因为很少需要它 - 产生这个输出的是什么,是否需要修复?