json()方法和json.loads()有什么区别

时间:2019-09-22 11:42:47

标签: python json

我正在用json数据练习python。我遇到了.json()方法和json.loads()。两者都返回相同的输出。我想知道两者之间是否有任何区别。

r = request.get('name of url')
text = r.text
data = json.loads(text)

r = request.get('name of url')
data1 = r.json()

data和data1具有相同的“ dict”类型,并返回相同的输出。为什么我们要使用一个与另一个。为什么有见识?

4 个答案:

答案 0 :(得分:2)

.jsonrequests.models.Response类的方法。它从请求的响应中返回json主体数据。

import requests
r = requests.get('https://reqres.in/api/users?page=2')
print(type(r))  # <class 'requests.models.Response'>
r.json() 

loadsjson包中的函数,用于解析字符串数据

import json
print(type(r.text)) # <class 'str'>
json.loads(r.text)

json.loads可以与任何字符串数据一起使用,不仅可以在请求上下文中使用

json.loads('{"key": "value"}')

答案 1 :(得分:1)

有 2 个细微差别。

  1. 输入是不同的。假设 r = requests.get(...),

    r.json() 输出类型 dict,但接受类型 requests.models.Response

    json.loads(r.text) 输出类型 dict,但接受类型 string

  2. 编码假设不同:

    r.json() 通过额外的步骤来检测编码 在处理输入之前,了解更多详情here

    json.loads(r.text) 假定默认编码为“UTF-8” 并处理输入。

总而言之,如果您确定输入是“UTF-8”编码,请使用 json.loads(r.text)。要获得更可靠的方法而无需检查编码,请使用 r.json()(我个人更喜欢这个)。

答案 2 :(得分:0)

.json()json.loads()的快捷方式

在python中,有许多用于json的方法

load()
loads()
dump()
dumps()

了解差异here

答案 3 :(得分:0)

json对象的requests.models.Response方法最终调用了json.loads方法,但是它可能还会做更多的事情。

您可以在requests.models.Response.json source code中看到它有时会在调用complexjson.loads(实际上是json.loads)之前尝试猜测编码:

    if not self.encoding and self.content and len(self.content) > 3:
        # No encoding set. JSON RFC 4627 section 3 states we should expect
        # UTF-8, -16 or -32. Detect which one to use; If the detection or
        # decoding fails, fall back to `self.text` (using chardet to make
        # a best guess).
        encoding = guess_json_utf(self.content)

因此,似乎通常使用r.json()json.loads(r.text)更好。