Python Flask:如何将字典对象转换为json?

Python Flask : How to convert a dictionary object to json?

本问题已经有最佳答案,请猛点这里访问。

我对Python还比较陌生。所以我有一个基于flask的RESTAPI,所以我有一个如下所示的字典:

1
dict = {'left': 0.17037454, 'right': 0.82339555, '_unknown_': 0.0059609693}

我需要将它添加到我的JSON响应对象中,如下所示:

1
2
3
4
5
6
7
8
9
message = {
                            'status': 200,
                            'message': 'OK',
                            'scores': dict
                        }
                resp = jsonify(message)
                resp.status_code = 200
                print(resp)
                return resp

我得到以下错误:

1
2
3
....\x.py", line 179, in default
    raise TypeError(repr(o) +"
is not JSON serializable")
TypeError: 0.027647732 is not JSON serializable

有人能帮我吗?谢谢。


代码对我来说运行良好。查看以下示例服务器代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from flask import Flask
from flask import jsonify

app = Flask(__name__)


@app.route('/')
def hello():
    d = {'left': 0.17037454, 'right': 0.82339555, '_unknown_': 0.0059609693}
    message = {
        'status': 200,
        'message': 'OK',
        'scores': d
    }
    resp = jsonify(message)
    resp.status_code = 200
    print(resp)
    return resp

if __name__ == '__main__':
    app.run()

以下旋度返回良好:

1
2
3
4
5
6
7
8
9
10
$ curl http://localhost:5000/
{
 "message":"OK",
 "scores": {
   "_unknown_": 0.0059609693,
   "left": 0.17037454,
   "right": 0.82339555
  },
 "status": 200
}


当您试图JSonify某个不是纯Python字典的内容时,会出现此错误。所以只需使用纯Python对象,这些对象很容易转换为JSON。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/')
def index():
    dict_obj = {
        'left': 0.17037454,
        'right': 0.82339555,
        '_unknown_': 0.0059609693
    }
    message = {
        'status': 200,
        'message': 'OK',
        'scores': dict_obj
    }
    resp = jsonify(message)
    resp.status_code = 200
    print(resp)
    return resp

if __name__ == '__main__':
    app.run(debug=True)

这是一个非常简单的代码。

运行此代码后,当您在浏览器中点击localhost:5000时,您会看到此输出

1
2
3
4
5
6
7
8
9
{
 "message":"OK",
 "scores": {
   "_unknown_": 0.0059609693,
   "left": 0.17037454,
   "right": 0.82339555
  },
 "status": 200
}

我在这里用过Flask==1.0.2

很少观察到:

  • 不要将dict用作变量名。它是一个python关键字。

  • 编写代码时遵循PEP8标准。

  • 不要在代码中保留尾随空格。