【问题标题】:How do I `jsonify` a list in Flask? [duplicate]如何在 Flask 中“jsonify”一个列表? [复制]
【发布时间】:2012-09-08 06:07:03
【问题描述】:

目前Flask 在对列表进行 json 化时会引发错误。

我知道https://github.com/mitsuhiko/flask/issues/170 可能存在安全原因,但我仍然希望有一种方法可以返回如下所示的 JSON 列表:

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

而不是

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

关于响应application/json 请求。如何使用 Jsonify 在 Flask 中返回 JSON 列表?

【问题讨论】:

标签: json flask


【解决方案1】:

这对我有用。您使用的是哪个版本的 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)

【讨论】:

  • 好吧,我使用的是 Flask 0.9,但似乎这会输出一个哈希 json 而不是列表 json。
  • 不建议使用list作为变量标识符
【解决方案2】:

jsonify 阻止您在 Flask 0.10 和更低版本的 for security reasons 中执行此操作。

无论如何,只要在 Python 标准库中使用 json.dumps

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

【讨论】:

【解决方案3】:

如果您在字面上搜索在烧瓶中返回 JSON 列表 的方法,并且您完全确定您的变量是一个列表,那么简单的方法是(其中 bin是 1 和 0 的列表):

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

最后,在您的客户端中,您将获得类似的东西

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

【讨论】:

    【解决方案4】:

    Flask 的 jsonify() 方法现在可序列化顶级数组 this commit,在 Flask 0.11 及更高版本中可用。

    为方便起见,您可以传入 Python 列表:jsonify([1,2,3]) 或者传入一系列args:jsonify(1,2,3)

    两者都将被序列化为 JSON 顶级数组:[1,2,3]

    详情请看:http://flask.pocoo.org/docs/dev/api/#flask.json.jsonify

    【讨论】:

      【解决方案5】:

      使用 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(__name__ == '__main__'):
          app.run(debug = True)
      

      【讨论】:

      • jsonify({'tasks': tasks}) 工作完美,这无疑为我节省了很多时间
      【解决方案6】:

      你不能,但无论如何你都可以这样做。我需要这个用于 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')
      

      【讨论】:

      • 还有flask.json.dumps不知道是不是比json.dumps好
      • @CameronWhite - flask.jsontry: import simplejson as json; except ImportError: import json 的简写
      • +1 for mimetype='application/json',帮我寻找相关的标题 :)
      • 有趣的是我在完全相同的情况下被困在这个问题上(jQuery 文件上传),你的代码也以另一种方式帮助了我。
      • 我最喜欢这个答案。根据我的经验,Response() 以比 make_response() 更简单的方式公开 mimetype,并且仅执行 return json.dumps() 不会设置任何标题。
      【解决方案7】:

      已解决,不用大惊小怪。你可以偷懒用jsonify,只需要传入items=[your list]。

      在这里查看解决方案

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

      【讨论】:

        【解决方案8】:

        josonify 有效..但如果您打算只传递一个没有“结果”键的数组,您可以使用 python 中的 json 库。以下转换对我有用..

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

        【讨论】:

          猜你喜欢
          • 2014-02-20
          • 2021-12-26
          • 2017-03-13
          • 1970-01-01
          • 1970-01-01
          • 2011-10-29
          • 2019-04-15
          • 2012-12-09
          相关资源
          最近更新 更多