【问题标题】:Parsing json including null result NameError with Python 2.7使用 Python 2.7 解析包含空结果 NameError 的 json
【发布时间】:2013-02-26 20:11:29
【问题描述】:

我想从这个 json 数据中挑选出“b”标签。 但它会导致 NameError。 请告诉如何改进此代码。

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"]

【问题讨论】:

  • 请在您的问题中发布异常,包括堆栈跟踪。

标签: python json python-2.7


【解决方案1】:

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

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

这里我们使用三引号 (''') 来定义多行字符串。

这应该可以按预期工作。我想你只是举个例子,但是值得注意的是,这在这种情况下是毫无意义的,你最好直接定义 Python 数据结构,而不是使用 JSON。

【讨论】:

  • 我尝试打印 json_data["two"]["b"],但结果 TypeError:string indices must be inegers, not str
  • 你仍然需要json.loads() - 如果你不想采取额外的步骤,只需将其定义为dict 并使用它。
【解决方案2】:

您的代码不起作用,因为您试图将 Python 字典传递给不存在的 json.decode() 函数。下面通过手动将json_data 转换为字符串并将其直接传递给json.loads() 来解决这些问题,这会将遇到的nulls 转换为Nones。

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"]

输出:

None

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    相关资源
    最近更新 更多