我使用请求库对JSON响应进行解码,如下所示:
正在解码的有效负载:
{
"objectOne": {
"desc": "one"
},
"objectTwo": {
"desc": "two"
}
}
代码:
from django.http import HttpResponse
import requests
class ApiService:
@staticmethod
def say_something(self):
resp = requests.get('http://127.0.0.1:9501/polls/test/')
return HttpResponse(resp.json())
输出:
目标一目标二
我遵循官方文件中的简单示例:
此外,我将响应包装在[]
括号中,以查看响应是否必须在JSON数组中,但它只返回一个数组,其中第一个也是唯一一个元素是objectOneobjectTwo。你知道吗
你把发生的事情误诊了。
requests
正在返回正确的词典。但是您正在将字典传递给HttpResponse()
,而不进行任何进一步的处理。但是,HttpResponse()
未设置为处理字典。你知道吗发生的情况是} documentation :
HttpResponse()
接受一个iterable,并将iterable中的每个值作为一个字符串。实际上,您告诉Django只向客户端发送串接的键。从^{从^{} documentation 开始:
如果要发送JSON数据,请使用^{} object 。它被设置为正确编码Python对象:
或者不必费心解码和重新编码,只需传递原始响应数据:
注意:我删除了类和
staticmethod
装饰器;当没有共享状态时,在类中包装静态视图函数没有什么意义。使用模块来创建名称空间。你知道吗您的数据是一个JSON对象,它被解析为Python字典。HttpResponse需要一个iterable,它在返回上游响应时会遍历它;通常您会传递一个字符串(即呈现模板的结果),但在这里您会传递一个字典。遍历字典只会得到关键字。你知道吗
如果要显示完整的输出,请首先通过传递
str(response.json())
将其转换为字符串—这当然是毫无意义的,因为它与原始响应相同。你知道吗相关问题 更多 >
编程相关推荐