为什么没有瓶装退货清单?

时间:2016-11-19 17:13:52

标签: python json bottle

(注意:这是一个duplicate,我投票决定关闭它,但它可能永远不会发生所以我突出显示信息,因为我从来不知道黄色信息横幅是否可能重复每个人都看到或只是我看到了

我想使用bottle返回列表的JSON表示:

import bottle

def ret_dict():
    return {
        "who": {"name": "John"}
    }

def ret_list():
    return [
        {"name": "John"}
    ]

app = bottle.Bottle()
app.route('/dict', 'GET', ret_dict)
app.route('/list', 'GET', ret_list)
app.run()

调用http://127.0.0.1:8080/dict返回{"who": {"name": "John"}}Content-Type设置为application/json。这没关系。

致电http://127.0.0.1:8080/list会返回500

  

错误:500内部服务器错误抱歉,请求的网址

     

' http://127.0.0.1:8080/list'导致错误:

     

不支持的响应类型:<课程' dict' >

Python控制台上没有错误或回溯。

同时列表可以序列化为JSON:

>>> import json
>>> json.dumps([{"name": "John"}])
'[{"name": "John"}]'

为什么bottle在尝试返回list时会出错?(并愉快地返回dict

1 个答案:

答案 0 :(得分:3)

Bottle的JSON插件只能返回dict类型的对象 - 而不是list。存在与返回JSON数组相关的漏洞 - 请参阅this post about JSON hijacking

作为一种变通方法,您可以将list对象包含在dict下,其中包含一些关键字,数据

def ret_list():
    my_data = [
        {"name": "John"}
    ]
    return {'data': my_data}

另请阅读Vinay's answer to "How do I return a JSON array with Bottle?"