6

作为 API 的介绍,我试图弄清楚如何使用 Rotten Tomatoes API 在 python 中访问数据。这也是我第一次处理json。

我正在使用 Python 3.4 并确认已安装 json 和 urllib3。

这是我的代码:

import urllib3
import json

url = 'http://api.rottentomatoes.com/api/public/v1.0/lists/movies/box_office.json?limit=16&country=us&apikey=API-KEY';

http = urllib3.PoolManager()
request = http.request('GET', url)
print (json.load(request));
request.release_conn()

这是我得到的错误:

Traceback (most recent call last):
  File "C:\Users\admnasst1\Documents\Personal\Python\RotTomTest.py", line 16, in <module>
    print (str(json.load(request)));
  File "C:\Python34\lib\json\__init__.py", line 268, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "C:\Python34\lib\json\__init__.py", line 312, in loads
    s.__class__.__name__))
TypeError: the JSON object must be str, not 'bytes'

因为我尝试了很多新东西(API、urllib3、json),所以我不确定发生了什么。我已经尝试过执行上述代码的其他几个版本,但我一直收到相同的错误,所以我认为我一定缺少一些基本的东西......你们中的任何人都可以发现它吗?

4

1 回答 1

14

您需要将网络数据解码为字符串:

json.loads(request.data.decode('utf8'))

理想情况下,您会从Content-Type标头中检测出使用了什么编解码器;你会解析它并寻找一个charset=参数。JSON 数据的默认编码是 UTF-8。

如果您要使用 3rd 方库,请requests改用。它包装urllib3在一个友好的 API 中可以为您处理 JSON:

import requests

url = 'http://api.rottentomatoes.com/api/public/v1.0/lists/movies/box_office.json'
params = {'limit': 16, 'country': 'us', 'apikey': 'API-KEY'}

response = requests.get(url, params=params)
print(response.json())
于 2014-08-07T18:47:06.317 回答