return 来自 web2py 的 JSON 列表
return a list as JSON from web2py
有什么方法可以将列表 return 作为来自 web2py 的 JSON 列表吗?
当我到达以 .json
结尾的路线时,web2py 将字典转换为有效的 JSON。但是,如果 return 值是一个列表,它的行为会出乎意料
return ["test", "test"]
显示
testtest
和
return [dict(test="test"), dict(test="test")]
完全破坏它(chrome 抱怨 ERR_INVALID_CHUNKED_ENCODING)。预期行为显然分别是以下有效的 JSON 字符串:
["test", "test"]
和
[{"test":"test"}, {"test":"test"}]
如果您想 return 一个 JSON 响应,您的函数必须 return JSON 或触发将产生 JSON.在 web2py 中,只有当控制器函数 return 是字典时才会执行视图,因此您的函数不会导致执行视图(因为它不是 return 字典)。如果你的函数做了 return 字典,你仍然需要定义一个 .json
视图,或者通过 response.generic_patterns
显式启用 generic.json
视图(尽管 generic.json
实际上并不适合您的情况,因为它将整个字典 return 由函数编辑为 JSON - 因此您不能使用它仅输出一个列表)。
最简单的方案就是直接输出JSON:
import json
...
return json.dumps(['test', 'test'])
或者更简单:
return response.json(['test', 'test'])
用 @service.json
装饰器注册一个 json 服务并用 `app/controller/call/json/method' 调用它给了我预期的行为:
def f():
return ["test1", "test2"]
def call():
return service()
响应正文是
["test1", "test2"]
内容类型设置为 json
有什么方法可以将列表 return 作为来自 web2py 的 JSON 列表吗?
当我到达以 .json
结尾的路线时,web2py 将字典转换为有效的 JSON。但是,如果 return 值是一个列表,它的行为会出乎意料
return ["test", "test"]
显示
testtest
和
return [dict(test="test"), dict(test="test")]
完全破坏它(chrome 抱怨 ERR_INVALID_CHUNKED_ENCODING)。预期行为显然分别是以下有效的 JSON 字符串:
["test", "test"]
和
[{"test":"test"}, {"test":"test"}]
如果您想 return 一个 JSON 响应,您的函数必须 return JSON 或触发将产生 JSON.在 web2py 中,只有当控制器函数 return 是字典时才会执行视图,因此您的函数不会导致执行视图(因为它不是 return 字典)。如果你的函数做了 return 字典,你仍然需要定义一个 .json
视图,或者通过 response.generic_patterns
显式启用 generic.json
视图(尽管 generic.json
实际上并不适合您的情况,因为它将整个字典 return 由函数编辑为 JSON - 因此您不能使用它仅输出一个列表)。
最简单的方案就是直接输出JSON:
import json
...
return json.dumps(['test', 'test'])
或者更简单:
return response.json(['test', 'test'])
用 @service.json
装饰器注册一个 json 服务并用 `app/controller/call/json/method' 调用它给了我预期的行为:
def f():
return ["test1", "test2"]
def call():
return service()
响应正文是
["test1", "test2"]
内容类型设置为 json