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)
将jsonify
和dict
两次,你确定这是正确的做事方式吗?
@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? [复制]的主要内容,如果未能解决你的问题,请参考以下文章