【问题标题】:return a list as JSON from web2py从 web2py 返回一个 JSON 列表
【发布时间】:2017-03-18 17:29:43
【问题描述】:

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

【问题讨论】:

    标签: python json list web2py


    【解决方案1】:

    如果您想返回 JSON 响应,您的函数必须返回 JSON 或触发将生成 JSON 的视图的执行。在 web2py 中,仅当控制器函数返回字典时才会执行视图,因此您的函数不会导致视图被执行(因为它不返回字典)。如果您的函数确实返回了字典,您仍然需要定义 .json 视图,或通过 response.generic_patterns 显式启用 generic.json 视图(尽管 generic.json 实际上并不适合您的情况,因为它会转换函数返回给 JSON 的整个字典——所以你不能用它来只输出一个列表)。

    最简单的方案就是直接输出JSON:

        import json
        ...
        return json.dumps(['test', 'test'])
    

    或者更简单:

        return response.json(['test', 'test'])
    

    【讨论】:

      【解决方案2】:

      使用 @service.json 装饰器注册 json 服务并使用 `app/controller/call/json/method' 调用它给了我预期的行为:

      def f():
          return ["test1", "test2"]
      
      def call():
          return service()
      

      响应正文是

      ["test1", "test2"]
      

      内容类型设置为 json

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-19
        • 2022-06-15
        • 2018-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多