web-dev-qa-db-ja.com

Flaskでリストを「jsonify」するにはどうすればよいですか?

現在、Flaskはリストをjsonifyingするときにエラーを発生させます。

セキュリティ上の理由があるかもしれないことを知っています https://github.com/mitsuhiko/flask/issues/17 ですが、まだ次のようなJSONリストを返す方法が欲しいです:

[
    {'a': 1, 'b': 2},
    {'a': 5, 'b': 10}
]

の代わりに

{ 'results': [
    {'a': 1, 'b': 2},
    {'a': 5, 'b': 10}
]}

application/jsonリクエストへの応答時。 Jsonifyを使用してFlaskにJSONリストを返すにはどうすればよいですか?

81
hllau

jsonifyは、Flask 0.10以下でこれを実行できないようにします セキュリティ上の理由により

とにかくそれを行うには、Python標準ライブラリでjson.dumpsを使用します。

http://docs.python.org/library/json.html#json.dumps

54
FogleBird

できませんが、とにかくこうすることができます。 jQuery-File-Uploadにこれが必要でした

import json
# get this object
from flask import Response

#example data:

    js = [ { "name" : filename, "size" : st.st_size , 
        "url" : url_for('show', filename=filename)} ]
#then do this
    return Response(json.dumps(js),  mimetype='application/json')
73
mianos

これは私のために働いています。どのバージョンのFlaskを使用していますか?

from flask import jsonify

...

@app.route('/test/json')
def test_json():
    list = [
            {'a': 1, 'b': 2},
            {'a': 5, 'b': 10}
           ]
    return jsonify(results = list)
14

Flaskのjsonify()メソッドは、 this commit の時点でトップレベルの配列をシリアル化するようになり、Flask 0.11以降で利用可能になりました。

便宜上、Pythonリストを渡すことができます:jsonify([1,2,3])または一連のargsjsonify(1,2,3)を渡すことができます

両方ともJSONの最上位の配列にシリアル化されます:[1,2,3]

詳細はこちら: http://flask.pocoo.org/docs/dev/api/#flask.json.jsonify

8
Jeff Widman

解決、大騒ぎ。あなたは怠zyでjsonifyを使うことができます。あなたがする必要があるのはitems = [your list]を渡すことだけです。

ソリューションについてはこちらをご覧ください

https://github.com/mitsuhiko/flask/issues/51

7
stonefury

flaskのリストは、jsonifyのように簡単にjsonifyできます。

from flask import Flask,jsonify
app = Flask(__name__)

tasks = [
    {
        'id':1,
        'task':'this is first task'
    },
    {
        'id':2,
        'task':'this is another task'
    }
]

@app.route('/app-name/api/v0.1/tasks',methods=['GET'])
def get_tasks():
    return jsonify({'tasks':tasks})  #will return the json

if(__== '__main__'):
    app.run(debug = True)
5
Hiro

flaskでJSONリストを返す方法を文字通り検索していて、変数がリストであることを完全に確信している場合、簡単な方法は(wherebinは1と0のリストです):

   return jsonify({'ans':bin}), 201

最後に、クライアントで次のようなものを取得します

{"ans":[0.0、0.0、1.0、1.0、0.0]}

1

josonifyは動作します。ただし、 'results'キーなしで配列を渡すだけの場合は、Pythonのjsonライブラリを使用できます。次の変換は私のために動作します。

 import json

 @app.route('/test/json')
 def test_json():
 list = [
        {'a': 1, 'b': 2},
        {'a': 5, 'b': 10}
       ]
 return json.dumps(list))
0
Madhan Ganesh