从web2py返回一个列表作为JSON

时间:2016-11-04 19:08:39

标签: python json list web2py

有没有办法从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"}]

2 个答案:

答案 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