我正在尝试JSON编码一个复杂的numpy数组,并且我已经从astropy(http://astropy.readthedocs.org/en/latest/_modules/astropy/utils/misc.html#JsonCustomEncoder)找到了一个用于此目的的实用程序:
import numpy as np
class JsonCustomEncoder(json.JSONEncoder):
""" <cropped for brevity> """
def default(self, obj):
if isinstance(obj, (np.ndarray, np.number)):
return obj.tolist()
elif isinstance(obj, (complex, np.complex)):
return [obj.real, obj.imag]
elif isinstance(obj, set):
return list(obj)
elif isinstance(obj, bytes): # pragma: py3
return obj.decode()
return json.JSONEncoder.default(self, obj)
这对于复杂的numpy数组很有效:
test = {'some_key':np.array([1+1j,2+5j, 3-4j])}
随着倾倒产生:
encoded = json.dumps(test, cls=JsonCustomEncoder)
print encoded
>>> {"some key": [[1.0, 1.0], [2.0, 5.0], [3.0, -4.0]]}
问题是,我无法将其自动读回复杂数组。例如:
json.loads(encoded)
>>> {"some_key": [[1.0, 1.0], [2.0, 5.0], [3.0, -4.0]]}
你们能帮我找出覆盖加载/解码的方法,从而推断出这一定是一个复杂的数组吗?一、 它不应该是一个包含2个元素的列表,而应该把它们放回一个复杂的数组中。JsonCustomDecoder没有要覆盖的default()
方法,而且关于编码的文档对我来说有太多行话。
目前没有回答
相关问题 更多 >
编程相关推荐