2014-11-04 185 views
78
r = {'is_claimed': 'True', 'rating': 3.5} 
r = json.dumps(r) 
file.write(str(r['rating'])) 

我无法在json中访问我的数据。我究竟做错了什么?在Python中将字典转换为JSON

TypeError: string indices must be integers, not str 

回答

134

json.dumps()将字典转换为str对象,而不是json(dict)对象!因此您必须将字符加载到字典中才能使用json.loads()方法

请参阅json.dumps()作为保存方法,并使用json.loads()作为检索方法。

这是代码示例这可能会帮助您了解更:

import json 

r = {'is_claimed': 'True', 'rating': 3.5} 
r = json.dumps(r) 
loaded_r = json.loads(r) 
loaded_r['rating'] #Output 3.5 
type(r) #Output str 
type(loaded_r) #Output dict 
+0

你不觉得这是一个有点低效回加载JSON到一个单独的变量'loaded_r',考虑到你已经有了它在'r'中? – 2017-07-10 14:39:30

+9

这是一个示例代码,显示事情如何一起工作!我想提及所有的细节@TimCastelijns – 2017-07-10 14:41:46

13

json.dumps()返回python字典的JSON字符串表示形式。 See the docs

你不能这样做,因为r['rating'] r是一个字符串,而不是一个字典了

也许你的意思是像

r = {'is_claimed': 'True', 'rating': 3.5} 
json = json.dumps(r) # note i gave it a different name 
file.write(str(r['rating'])) 
-5

无需使用json.dumps字符串转换()

>>> f = open("t.txt",'w') 
>>> r = {'is_claimed': 'True', 'rating': 3.5} 
>>> f.write(r['is_claimed']) 
>>> f.write(r['rating']) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: expected a character buffer object 

必须是写入文件的字符串,但评价值是浮点数,所以先转换为字符串,然后尝试它。它希望有效。