问题:
我有一个非常复杂的json,其中包含多个超出8个字节的整数值(c_time,p_time),而有些则较小(以下示例中的id)
示例结构:
{
"c_time": 18446744062065078000,
"p_time": 18446744062065078000,
"id" : 122,
"name" : "example",
... : ...
simple json structure
}
当我想将此json插入Mongo时,iam面临以下错误。
Exception MongoDB can only handle up to 8-byte ints
我尝试过的事情
要纠正这一点,我有2个选项,一种方法是解析json并使用del c_time
删除所有此类大整数。但这显然存在问题,我正在丢失有价值的信息。
第二,我想将这些大整数转换为小刺。我通过json解析并尝试将其转换为字符串,但是由于json的结构和深度复杂,很难将它们全部转换为字符串。
是否有任何简单有效的方法将给定json中的所有长整数转换为字符串,而不会造成系统重大损失。
答案 0 :(得分:0)
我通过在插入时将所有int / float字段都转换为字符串来解决此问题,并在读取时再次将其转换为所有内容。这是Python中的代码:
def serialize(data):
if isinstance(data, types.GeneratorType):
data = list(data)
return convert_numeric_to_str(data)
def deserialize(data):
return convert_str_to_numeric(data)
和
def convert_numeric_to_str(d):
cur_type = type(d)
if cur_type == dict:
for key, value in d.items():
d[key] = convert_numeric_to_str(value)
elif cur_type == list:
for i, el in enumerate(d):
d[i] = convert_numeric_to_str(el)
else:
if cur_type in [int, float]:
d = str(d)
return d
def convert_str_to_numeric(d):
cur_type = type(d)
if cur_type == dict:
for key, value in d.items():
d[key] = convert_str_to_numeric(value)
elif cur_type == list:
for i, el in enumerate(d):
d[i] = convert_str_to_numeric(el)
else:
if cur_type == str:
try:
d = int(d)
except ValueError:
try:
d = float(d)
except ValueError:
pass
return d