将包含小数的Python字典转换为JSON
可能重复的问题:
Python JSON 序列化 Decimal 对象
任务:将一个包含多种数据类型(整数、字符串、小数等)的字典转换成 JSON 数组。
我知道怎么把一个 Python 字典转换成 JSON:
D = {key1:val1, key2,val2}
import json
jD = json.dumps(D)
我也知道小数值必须转换成字符串,否则 Python 会报错,提示“小数不能被序列化为 JSON”。
所以我需要遍历这个字典,检查每个值的数据类型。
for key in D.keys():
if type(key) == '<class "decimal.Decimal">': ## this is erroneous. pl. suggest correction
D[key] = str(D[key])
但是这样编程就需要手动写代码,而且还得硬编码。
如果我遇到一个嵌套的字典结构,又得进行硬编码(这其实是不对的)。
有没有其他方法或者技巧,可以从字典中提取出 JSON 数组,不管里面的数据类型是什么?
2 个回答
3
为什么不去子类化 JSONEncoder 呢?这其实很简单,也很干净:
class DecimalEncoder(json.JSONEncoder):
def _iterencode(self, o, markers=None):
if isinstance(o, decimal.Decimal): # isinstance() is better than type(), because it handles inheritance
return (str(o) for o in [o])
return super(DecimalEncoder, self)._iterencode(o, markers)
4
请注意,JSON 不能表示小数,只能表示浮点数和字符串。因此,你应该把小数转换成字符串,像这样:
keys_for_json = {str(k):v for k,v in keys.items()}