JSON只允许字符串作为键。在
下面的代码使用自定义JSONEncoder将Decimal
值转换为字符串。在
有没有一种方法可以指定一个将Decimal
键转换成字符串的编码器?在
import json
import decimal
class DecimalEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, decimal.Decimal):
return str(obj)
return json.JSONEncoder.default(self, obj)
d1 = {3: decimal.Decimal(50)}
print(json.dumps(d1, cls=DecimalEncoder))
d2 = {decimal.Decimal(50): 3}
json.dumps(d2, cls=DecimalEncoder) # TypeError: keys must be a string
我正在使用python3.6
。在
注意:显然,我可以遍历我的字典,用字符串值替换Decimal类型,但是我希望找到一个更优雅的解决方案,也许可以通过在编码器中添加行为来实现。在
不,你不能钩住键的处理,你必须在编码之前转换它们。您可以使用如下递归处理程序来执行此操作:
所有这一切只是递归地转换列表和dict的嵌套结构,其中所有的键都被强制为字符串。在
转换为JSON时使用:
^{pr2}$您也可以通过添加另一个注册表来扩展它来处理
Decimal
对象(键之外):换一种方式有点棘手,除非您显式地标记
Decimal
个键(比如用前缀),否则您很难区分以字符串开头的键和Decimal
值。您可以在这里使用try/except
方法:演示:
相关问题 更多 >
编程相关推荐