将字典转换为JSON


345
r = {'is_claimed': 'True', 'rating': 3.5}
r = json.dumps(r)
file.write(str(r['rating']))

我无法访问JSON中的数据。我究竟做错了什么?

TypeError: string indices must be integers, not str

Answers:


534

json.dumps()将字典转换为str对象,而不是json(dict)对象!因此,您必须使用方法将其加载strdictjson.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

11
loaded_r考虑到您已经将json加载回一个单独的变量中,您认为这样做效率不高r吗?
蒂姆(Tim)

嗨!我知道这是一个非常古老的答案,但我希望您能解决一件事。@TimCastelijns提到将json加载回新变量load_r效率低下。执行此操作的有效方法是仅声明r = json.loads(r)吗?
SchrodingersStat

2
@SchrodingersStat您好。我认为这不会改变性能。您可以使用“ timeit”功能进行检查。如果您真的想要快速的json加载/转储,可以使用'ujson'库!
伊曼·米尔扎德

14
我怀疑@TimCastelijns误解了伊姆兰的意图。将JSON加载到新变量中并不是因为它是新信息,而是为了表明新字典中的值(即在JSON编码和解码往返之后)的值是相同的。
dumbledad

43

json.dumps()返回python字典的JSON字符串表示形式。查看文件

您不能这样做,r['rating']因为r是字符串,不再是dict

也许你的意思是

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

2

无需通过使用将其转换为字符串 json.dumps()

r = {'is_claimed': 'True', 'rating': 3.5}
file.write(r['is_claimed'])
file.write(str(r['rating']))

您可以直接从dict对象获取值。


0

将r定义为字典应该可以解决这个问题:

>>> r: dict = {'is_claimed': 'True', 'rating': 3.5}
>>> print(r['rating'])
3.5
>>> type(r)
<class 'dict'>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.