我有以下格式的对象列表。我想以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)
答案 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)
上面的精确代码可能不适用于您的特定对象,但一般的想法是在序列化之前将任何非“标准”浮点数转换为标准的可序列化浮点数。