url.json() 和 json.loads() 的区别

Mav*_*ckD 0 python json

我编写了以下代码来从 url 读取示例 JSON 数据,

HEADER = {"content-type": "application/josn"}

session = requests.Session()
session.verify = True
session.headers = HEADER

output = session.request("GET", "https://jsonplaceholder.typicode.com/todos/1", timeout=30)
Run Code Online (Sandbox Code Playgroud)

如果我打印output我得到,

<Response [200]>

如果我做,

output = session.request("GET", "https://jsonplaceholder.typicode.com/todos/1", timeout=30).json()
Run Code Online (Sandbox Code Playgroud)

我得到实际json内容,

{u'completed': False, u'userId': 1, u'id': 1, u'title': u'delectus aut autem'}
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,

output = session.request("GET", "https://jsonplaceholder.typicode.com/todos/1", timeout=30)
print(json.loads(output))
Run Code Online (Sandbox Code Playgroud)

我明白了,

  File "/usr/lib64/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer
Run Code Online (Sandbox Code Playgroud)

有人可以给我举个例子,我应该什么时候使用.json(),什么时候使用json.loads()

Mau*_*zar 6

.json只是json.loads()响应为 json 时的快捷方式。

print(json.loads(output))

无法正常工作,因为您需要获取请求的正文,我认为是

print(json.loads(output.text))

  • 这是正确的 - OP 中第二个示例中的 `output` [返回 `Response` 类型的对象](http://docs.python-requests.org/en/master/api/?highlight=.request#requests .request),这不是 `json.loads()` 接受作为 `s` 参数的数据类型。事实上,唯一接受的数据类型是unicode的`str`([来源](https://docs.python.org/2/library/json.html#json.loads))。 (2认同)