我试图用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数据的方法吗?
答案 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
。查看source和documentation,我们看到它的目的是返回一个列表。因此,您应该将其视为列表而不是需要解码的字符串。
具体来说,V3Query
是ApiQuery
的子类,而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字符串并且格式如下: '{“核心价值}' 而不仅仅是字形: { “键”:值}