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

时间:2018-08-27 06:45:04

标签: python json flask

我是Python的新手。所以我有一个基于Flask的REST API,所以我有一个字典如下所示:

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

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

message = {
                            'status': 200,
                            'message': 'OK',
                            'scores': dict 
                        }
                resp = jsonify(message)
                resp.status_code = 200
                print(resp)
                return resp

我遇到以下错误:

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

有人可以帮我吗? 谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

以下卷曲恢复正常:

$ curl http://localhost:5000/
{
  "message": "OK", 
  "scores": {
    "_unknown_": 0.0059609693, 
    "left": 0.17037454, 
    "right": 0.82339555
  }, 
  "status": 200
}

答案 1 :(得分:0)

当您尝试对不是纯python字典的内容进行JSON解码时,会看到此错误。因此,只需使用易于转换为JSON的纯python对象即可。

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时,您将看到此输出

{
  "message": "OK", 
  "scores": {
    "_unknown_": 0.0059609693, 
    "left": 0.17037454, 
    "right": 0.82339555
  }, 
  "status": 200
}

我在这里使用过Flask==1.0.2

一些观察结果:

  1. 请勿使用dict作为变量名。它是python关键字。

  2. 在编写代码时遵循PEP8标准。

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