解析Python脚本中的JSON数据时遇到麻烦

时间:2014-04-12 11:59:43

标签: python json parsing error-handling

我编写了我的第一个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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

修改:点击data_decoded['152']。您仍然在尝试访问{J}字符串<{1}}

答案 2 :(得分:0)

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

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

因为你已经有了一个字典,所以不需要做一个json函数,只需简单地引用数据:

data['key1']

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

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

data_decoded['key1'] 

???

祝你好运!