JSON无法处理numpy的float128类型

时间:2019-05-24 10:26:57

标签: json numpy floating-point

我需要将dtype float128的numpy数组转储到JSON。为此,我编写了一个自定义数组编码器,该数组编码器通过在数组上调用tolist()来正确处理数组。对于float以外的所有实值dtypes,此方法都很好。请参见以下示例:

import json
import numpy as np


class ArrayEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, np.ndarray):
            out = {'__ndarray__': True,
                   '__dtype__': o.dtype.str,
                   'data': o.tolist()}
            return out
        return json.JSONEncoder.default(self, o)

arr64 = np.array([1, 2, 3], dtype='float64')
arr128 = np.array([1, 3, 4], dtype='float128')

json.dumps(arr64, cls=ArrayEncoder)     # fine
json.dumps(arr128, cls=ArrayEncoder)    # TypeError
  

TypeError:float128类型的对象不可JSON序列化

编码器的目的是提供JSON可以处理的格式的数据。在这种情况下,数据将转换为纯Python浮点数列表,这不会造成任何麻烦。一种可能的解决方案是将编码器中的转换线更改为

class ArrayEncoder(json.JSONEncoder):
    def default(self, o):
        ...
            'data': o.astype('float64').tolist()
        ...

但是,我很感兴趣。为什么JSON即使使用使用可序列化格式提供数据的编码器,仍会引发错误?

0 个答案:

没有答案