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