kra*_*r65 9 python json dictionary decimal flask
我正在使用Flask构建一个网站,我从中大量使用jsonify方法将字典转换为Json.
问题是现在我也经常使用Decimals,不幸的是jsonify无法处理Decimal:
jsonify({'a': Decimal('1')})
Run Code Online (Sandbox Code Playgroud)
导致:
=== (a long stacktrace preceding this) ===
File "/usr/local/lib/python2.7/dist-packages/flask/json.py", line 83, in default
return _json.JSONEncoder.default(self, o)
File "/usr/lib/python2.7/json/encoder.py", line 184, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: Decimal('1') is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
所以我想用这样的方法包装jsonify:
def myOwnJsonify(item):
if isinstance(item, Decimal):
return flask.jsonify(str(item))
else:
return flask.jsonify(item)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不会转换位于字典或列表中的十进制数.
如何将python数据结构中的所有十进制数字(无论是列表,字典,元组等)转换为字符串,以便我可以安全地将数据结构转换为json?
use*_*450 18
您可以通过在应用json_encoder程序实例上设置属性来覆盖应用程序的JSON编码器:
import flask
app = flask.Flask(...)
app.json_encoder = MyJSONEncoder
Run Code Online (Sandbox Code Playgroud)
然后你可以对Flask进行子类化JSONEncoder并覆盖该default()方法以提供对其他类型的支持:
import decimal
import flask.json
class MyJSONEncoder(flask.json.JSONEncoder):
def default(self, obj):
if isinstance(obj, decimal.Decimal):
# Convert decimal instances to strings.
return str(obj)
return super(MyJSONEncoder, self).default(obj)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4295 次 |
| 最近记录: |