我在web2py中有一些RESTful API调用,它们接收JSON文件。我使用curl通过命令行进行调用,如:
curl -H "Content-Type: application/json" --data @mydata.json https://mywebsite/doWork
在我的web2py控制器中,我已将其设置为读取POST请求。当我通过返回来检查request.vars时,它包含完整的JSON数据,但request.vars的类型为:class' gluon.storage.Storage'。
我需要控制器中的字符串格式的数据。但是,如果我执行str(request.vars),web2py会在我的数据前添加一个Storage标记。
@request.restful()
def doWork():
def POST(*args, **vars):
return(request.vars)
return locals()
假设mydata.json文件很简单:
{ "关键":"价值" }
POST请求将返回{" key":" value"}作为gluon.storage.Storage对象。
如果我将行返回(request.vars)更改为return(str(request.vars)),则输出现在为:<存储{u' key&#39 ;: u' value'}>
如何将此request.vars转换为字符串,而不将Storage标记附加到前面,并将双引号更改为单引号?
答案 0 :(得分:2)
如果您想将vars
转换回JSON,可以使用Python json
库或只使用response.json
:
return response.json(vars)
或者,您可以将.json
扩展名添加到请求中,只需直接返回vars
:
return vars
以下请求:
curl -H "Content-Type: application/json" --data @mydata.json https://mywebsite/doWork.json
在这种情况下,web2py会自动将响应转换为JSON。