使用Python2.7解析json(包括空结果名称错误)

使用Python2.7解析json(包括空结果名称错误),python,json,python-2.7,Python,Json,Python 2.7,我想从这个json数据中选择“b”标记。 但结果是错误的。 请说明如何改进此代码 json_data = {"one": null, "two": {"a": "1", "b": null}, "three": "3" } if __name__=="__main__": new_data = json.decode(json_data) json = json.loads(new_data) print json[

我想从这个json数据中选择“b”标记。 但结果是错误的。 请说明如何改进此代码

json_data = {"one": null,
         "two": {"a": "1", "b": null},
         "three": "3"
         }

if __name__=="__main__":
    new_data = json.decode(json_data)
    json = json.loads(new_data)
    print json["two"]["b"]

这里的问题是您试图解码一个对象,而不是一个包含JSON的字符串。这意味着Python正在将数据解析为
dict
文本,这导致它试图为
null
找到一个值,而这在Python中是不存在的。相反,您希望生成一个字符串:

json_data = '''{"one": null,
         "two": {"a": "1", "b": null},
         "three": "3"
         }'''
这里我们使用三重引号(
'
)来定义多行字符串


这应该像预期的那样起作用。我假定您只是给出了一个示例,但是值得注意的是,在这种情况下,这是毫无意义的,您最好直接定义Python数据结构,而不使用JSON。

您的代码不起作用,因为您试图将Python字典传递给不存在的
JSON.decode()
功能。下面通过手动将
json\u数据
转换为字符串,并将其直接传递到
json.loads()
,从而将遇到的
null
s转换为
None
s来解决这些问题

import json

json_data = '''{"one": null,
                "two": {"a": "1", "b": null},
                "three": "3"
               }'''

if __name__=="__main__":
    json = json.loads(json_data)
    print json["two"]["b"]
输出:


请将异常与您的问题一起发布,包括堆栈跟踪。我尝试打印json_数据[“2”][“b”],但结果是TypeError:字符串索引必须为inegers,而不是stry您仍然需要执行
json.loads()
-如果您不想执行额外的步骤,只需将其定义为
dict
,然后使用它即可。