我编写了我的第一个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
我不在乎它是字符串还是整数。我想只是检索价值。
答案 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']
???
祝你好运!