我的对象是dict
,list
,常规数据类型和decimal.Decimal
的嵌套组合。我想用PyMongo将此对象插入MongoDB。 PyMongo拒绝插入Decimal.decimal
,因此我想将所有Decimal.decimal
转换为string
。
以前,您可以使用son_manipulator
执行此操作,但现在是deprecated。
如何有效地将嵌套数据结构中的所有decimal.Decimal
个对象转换为string
?
答案 0 :(得分:1)
与亚马逊的DynamoDB和boto3完全相同的问题。
def replace_decimals(obj):
if isinstance(obj, list):
for i in xrange(len(obj)):
obj[i] = replace_decimals(obj[i])
return obj
elif isinstance(obj, dict):
for k in obj.iterkeys():
obj[k] = replace_decimals(obj[k])
return obj
elif isinstance(obj, decimal.Decimal):
return str(obj)
# In my original code I'm converting to int or float, comment the line above if necessary.
if obj % 1 == 0:
return int(obj)
else:
return float(obj)
else:
return obj