【问题标题】:Trouble on parsing JSON data within a Python script在 Python 脚本中解析 JSON 数据时遇到问题
【发布时间】:2014-04-12 11:59:42
【问题描述】:

我编写了我的第一个 Python 脚本(注意:我是 Python 新手),我正在尝试解析一些 JSON 字符串以检索与特定 JSON 键相关的值,但我遇到了麻烦。

在我的script.py 文件中,我有以下内容:

data = '{ "key1": "152", "key2": "da8fb07ace5512", "key3": "cfed379e13aebc" }'
data_decoded = json.load(data)
data["key1"]

当我使用命令python script.py 运行上述脚本时,我得到:

Traceback (most recent call last):
  File "/script.py", line 2, in <module>
    data_decoded = json.load(data)
  File "/usr/lib/python2.7/json/__init__.py", line 274, in load
    return loads(fp.read(),
AttributeError: 'str' object has no attribute 'read'

我该如何解决这个问题?我希望返回值是152


更新(评论后)

如果我使用loads(),那么我会得到:

Traceback (most recent call last):
  File "/script.py", line 3, in <module>
    data["key1"]
TypeError: string indices must be integers, not str

我不在乎它是字符串还是整数。我只想检索该值。

【问题讨论】:

  • 尝试使用json.loads() 而不是json.load() - 解析字符串而不是文件流。
  • "我不在乎它是字符串还是整数。" - 它不是字符串或整数的值。您看到错误消息中的“索引”字样了吗?您应该阅读和理解错误消息,这就是它们出现在这里的原因。他们会帮助你。

标签: python json parsing error-handling


【解决方案1】:

对于字符串,您必须使用json.loads(),而不是json.load(),因为load 用于文件和类似文件的对象。

【讨论】:

  • @Backo 现在仔细阅读你的代码。你在索引什么?您应该用什么来代替索引?
  • 我不明白你的问题。你到底是什么意思?
  • @Backo 我的意思是你应该阅读你的代码并考虑它在做什么。 data["key1"] 没有意义。 data_decoded["key1"] 确实如此。请花一些精力调试您的自己的代码,尤其是因为这是一个微不足道的错误。
【解决方案2】:

json.load 需要一个 filename 类似文件的对象。您想使用从字符串加载的json.loads

另请参阅:https://docs.python.org/2/library/json.html

编辑:试试data_decoded['152']。您仍在尝试访问 data,JSON 字符串

【讨论】:

  • json.load 不需要文件名。它需要一个文件对象。
【解决方案3】:

您已经在声明您的字典对象,只需将其从引号中取出:

data = { "key1": "152", "key2": "da8fb07ace5512", "key3": "cfed379e13aebc" }

因为你已经有了字典,所以不需要做json函数,直接引用数据即可:

data['key1']

但是,如果我误解了您的问题并且您将数据作为 json 传递,python 会将其识别为字符串,您需要对数据使用 json.loads 函数:

请注意,在您发出 data_decoded = json.loads(data) 之后,您的字典对象不再是 data,它实际上现在是 data_decoded。你试过了吗:

data_decoded['key1'] 

???

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 2019-06-17
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多