(注意:这是一个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
)
答案 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?"。