任务:将包含混合数据类型(整数/ strint / decimal / ...)的dict转换为值,转换为JSON数组。
我知道如何将python dict转换为JSON:
D = {key1:val1, key2,val2}
import json
jD = json.dumps(D)
我也知道十进制值必须转换为字符串,否则python会抛出'decimal不是json serializable'的错误。
所以我需要遍历dict以查找数据类型。
for key in D.keys():
if type(key) == '<class "decimal.Decimal">': ## this is erroneous. pl. suggest correction
D[key] = str(D[key])
但是这种编程涉及手工编码和硬编码。
如果我得到嵌套字典结构,则需要再次进行硬编码(这是错误的)。
是否还有其他方法/技巧可以从dict中的任何数据类型中获取JSON数组?
答案 0 :(得分:4)
请注意,JSON不能表示小数,只能表示浮点数和字符串。因此,您应该将小数转换为字符串,如下所示:
keys_for_json = {str(k):v for k,v in keys.items()}
答案 1 :(得分: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)