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

2024-05-15 01:44:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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

有人能帮我吗? 谢谢。


Tags: rightrestapijsonflaskmessage字典is
2条回答

当您尝试对非纯python字典的内容进行jsonify时,会看到此错误。所以只需使用纯python对象,这些对象很容易转换为JSON。

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. 不要在代码中一直跟踪空格。

代码对我来说运行良好。请看下面的服务器代码示例:

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
}

相关问题 更多 >

    热门问题