有没有办法从web2py返回列表作为JSON列表?
当我点击以.json
结尾的路线时,web2py会将字典转换为有效的JSON。但是,如果返回值是一个列表,则它会出现意外行为
return ["test", "test"]
显示器
testtest
和
return [dict(test="test"), dict(test="test")]
完全打破它(chrome抱怨ERR_INVALID_CHUNKED_ENCODING)。期望行为显然分别是以下有效的JSON字符串:
["test", "test"]
和
[{"test":"test"}, {"test":"test"}]
答案 0 :(得分:2)
如果要返回JSON响应,则函数必须返回JSON或触发执行将生成JSON的视图。在web2py中,只有在控制器函数返回字典时才会执行视图,因此您的函数不会导致视图被执行(因为它不返回字典)。如果您的函数确实返回了字典,则仍需要定义.json
视图,或通过generic.json
明确启用response.generic_patterns
视图(尽管generic.json
实际上不会适用于您的情况,因为它将函数返回的整个字典转换为JSON - 因此您无法使用它仅输出列表。)
最简单的解决方案就是直接输出JSON:
import json
...
return json.dumps(['test', 'test'])
甚至更简单:
return response.json(['test', 'test'])
答案 1 :(得分:0)
使用@service.json
装饰器注册json服务并使用`app / controller / call / json / method'调用它给了我预期的行为:
def f():
return ["test1", "test2"]
def call():
return service()
回复正文
["test1", "test2"]
将content-type设置为json