JSON与Python"对象必须是str,而不是dict"

时间:2016-03-10 22:06:50

标签: python json api

我试图用Python解释来自Twitch API的数据。这是我的代码:

from twitch.api import v3
import json

streams = v3.streams.all(limit=1)
list = json.loads(streams) 
print(list) 

然后,在跑步时,我得到:

  

TypeError," JSON对象必须是str,而不是' dict'"

有什么想法吗?另外,这是一种我真的想要使用API​​数据的方法吗?

2 个答案:

答案 0 :(得分:1)

根据documentation json.loads()将字符串解析为json层次结构(通常为dict)。因此,如果您没有将字符串传递给它,它将会失败。

  

json.loads(s,encoding = None,cls = None,object_hook = None,   parse_float = None,parse_int = None,parse_constant = None,   object_pairs_hook = None,** kw)反序列化s(包含的str实例)   使用此转换表的Python对象的JSON文档。

     

其他参数与load()中的含义相同,除外   编码被忽略和弃用。

     

如果要反序列化的数据不是有效的JSON文档,则a   将引发JSONDecodeError。

Twitch API我们看到all()返回的对象是V3Query。查看sourcedocumentation,我们看到它的目的是返回一个列表。因此,您应该将其视为列表而不是需要解码的字符串。

具体来说,V3QueryApiQuery的子类,而JsonQuery的子类是json.loads()的子类。该类显式运行查询并在结果get_json上传递函数。该来源明确调用public boolean exists(Record record) { if(map.containsKey(record.getTitle())) { return true; } return false; } ...所以您不需要!记住:永远不要害怕挖掘来源。

答案 1 :(得分:0)

在streams = v3.streams.all(limit = 1)之后 尝试使用 streams = json.dumps(streams)

由于流应该是JSON字符串并且格式如下: '{“核心价值}' 而不仅仅是字形: { “键”:值}