Python Flask:如何将字典对象转换为 json? [复制]

Posted

技术标签:

【中文标题】Python Flask:如何将字典对象转换为 json? [复制]【英文标题】:Python Flask : How to convert a dictionary object to json? [duplicate] 【发布时间】:2019-02-01 16:04:13 【问题描述】:

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

有人可以帮我解决这个问题吗? 谢谢。

【问题讨论】:

【参考方案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 返回正常:

$ curl http://localhost:5000/

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

【讨论】:

dict 上执行json.dumps 然后jsonify(message)jsonifydict 两次,你确定这是正确的做事方式吗? @ThatBird 更新【参考方案2】:

当您尝试 jsonify 不是纯 Python 字典的内容时会出现此错误。所以只需使用纯 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

几个观察:

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

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

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

【讨论】:

如果我的字典对象是动态创建的,它就不起作用。 # 按置信度排序以显示标签 top_k = predictions.argsort()[-num_top_predictions:][::-1] result = for node_id in top_k: human_string = labels[node_id] score = predictions[node_id] result[ human_string] = score print(type(result)) 它打印

以上是关于Python Flask:如何将字典对象转换为 json? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

python 将Suds对象转换为Python字典

如何将字节类型转换为字典?

Python。将 2 个列表转换为一个字典对象 [重复]

递归地将python对象图转换为字典

如何将 Python 数据结构中的所有小数转换为字符串?

python中如何将字符串转换为字典