Json在Python中不可序列化

时间:2018-02-07 09:03:07

标签: python json serialization

我有以下格式的对象列表。我想以json文件格式保存它。

{'result': [{'topleft': {'y': 103, 'x': 187}, 'confidence': 0.833129, 'bottomright': {'y': 375, 'x': 271}, 'label': 'person'}]}

我能够像上面那样打印物体。但是,当我尝试以JSON格式保存它时。我遇到错误"引发TypeError(repr(o)+"不是JSON可序列化")"

这是我的代码的一部分:

def writeToJSONFile(data):
    filePathNameWExt = '/media/test/abc.json'
    with open(filePathNameWExt, 'w') as fp:
        json.dump(data, fp)

result = tfnet.return_predict(img)
data['result']=result
print (data)   
writeToJSONFile(data)

1 个答案:

答案 0 :(得分:0)

我认为您的问题是您用于浮点的类型不是JSON可序列化的。如果您不想解决making it serializable的麻烦,可以在序列化之前将其简单地转换为“常规”浮点数。

例如,如果你使用numpy浮动(numpy.floating),你可以这样做:

result = tfnet.return_predict(img)

# Hack: Convert any numpy floats in result to regular floats.
# The lambda takes a (key,value) tuple and returns (key, float(value)), for any
# values that are numpy floats, without modifiying other values.
# The map applies the lambda to all (key,value) tuples in result.items().
serializable_result = dict(map(lambda (k, v): (k, float(v) if isinstance(v, numpy.floating) else v), result.items()))

data['result']=serializable_result 
print (data)   
writeToJSONFile(data)

上面的精确代码可能不适用于您的特定对象,但一般的想法是在序列化之前将任何非“标准”浮点数转换为标准的可序列化浮点数。