为什么在Python中类型(JSON)是str?

时间:2019-10-22 17:07:18

标签: python json string

我从带有请求的API中获取了一些数据:

r = requests.get(...)
a = r.text
print(type(a))
str2JSON = json.dumps(a,indent=4)
print(type(str2JSON))

结果是:

class 'str'
class 'str'

然后我尝试使用loads而不是dumps

str2JSON_2 = json.loads(a)
print(type(str2JSON_2))

然后我上了list类!

为什么是这种行为?

如果您将字符串转储到JSON中却没有收到错误,这是否自动表示JSON已被正确解析?那不应该是JSON类吗?

3 个答案:

答案 0 :(得分:4)

从请求中得到的结果是一个str值,其中包含JSON编码值。

dumps接受str并生成另一个字符串,其中包含原始(JSON编码)字符串的JSON编码版本。

您需要loads才能将字符串解码为一个值。

json2str = json.loads(a,indent=4)  # name change to reflect the direction of the operation

考虑:

>>> s = '"foo"'  # A JSON string value
>>> json.dumps(s)
'"\\"foo\\""'
>>> json.loads(s)
'foo'

该字符串当然可以编码一个简单字符串以外的值:

>>> json.loads('3')  # Compare to json.loads('"3"') returning '3'
3
>>> json.loads('[1,2,3]')
[1,2,3]
>>> json.loads('{"foo": 6}')
{'foo': 6}
但是,

requests实际上并不需要您记住dumpsloads的前进方向(尽管您应该把它作为学习的重点)。 Response对象具有一种json方法,可为您解码text属性。

json2str = r.json()  # equivalent to json2str = json.loads(r.text)

答案 1 :(得分:1)

您正在使用请求。它提供a = r.json()所需的convince method to parse your response as json(即为您加载)。这样a将成为JSON对象,以后可以将其作为字符串转储。假设您获得有效的json作为响应。

这是一个例子

import requests
import json

url = 'https://reqres.in/api/users' # dummy resposnse

resp =  requests.get(url)
my_json = resp.json()
#print example user
print(my_json['data'][0])
json_string = json.dumps(my_json, indent=4)
print(json_string)

答案 2 :(得分:0)

json.dumps返回JSON格式的python字符串对象。

下面是您可以在def dumps的实际实现文件中注意到的语句

  

“”“将obj序列化为JSON格式的str