2016-11-19 20 views
3

(注:これはそのように閉じるよう投票しましたが、それは決して起こらない可能性がありますので、ここで情報を明示的に配置してください。イエローの情報バナーが誰でも、 )なぜボトルリターンリストはありませんか?

私はbottleを使用して、リストのJSON表現を返したい:http://127.0.0.1:8080/dict戻り{"who": {"name": "John"}}Content-Typeを呼び出す

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() 

application/jsonに設定されています。これで結構です。 http://127.0.0.1:8080/listを呼び出す

500を返します。

Error: 500 Internal Server Error Sorry, the requested URL

' http://127.0.0.1:8080/list ' caused an error:

Unsupported response type: < class 'dict' >

のPythonコンソールには何のエラーもトレースバックがありません。

同時にリストがJSONにシリアライズすることができます。

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

listを返すようにしようとしたときbottleにエラーが発生しないのはなぜ?(そして喜んでdictを返す)

+0

ボトルの作者になぜ彼がそうしたのかを質問します。 – furas

答えて

3

ボトルのJSONプラグインは、ではないdictタイプのオブジェクトのみを返すことができます。 JSON配列を返すことに関連する脆弱性があります - this post about JSON hijackingを参照してください。

あなたには、いくつかのキーでdictlistオブジェクトをラップすることがあり、回避策として、データを言うように:

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

Vinay's answer to "How do I return a JSON array with Bottle?"をお読みください。

+1

ありがとうございます。私はまた、私の質問を重複としてマークしています。 – WoJ

関連する問題