NumPy数组不是JSON可序列化的

NumPy数组不是JSON可序列化的

创建NumPy数组并将其保存为Django上下文变量后,加载网页时收到以下错误:

array([   0,  239,  479,  717,  952, 1192, 1432, 1667], dtype=int64) is not JSON serializable

这是什么意思?


森林海
浏览 6283回答 3
3回答

神不在的星期二

我经常“jsonify”np.arrays。首先尝试在数组上使用“.tolist()”方法,如下所示:import numpy as npimport codecs, json  a = np.arange(10).reshape(2,5) # a 2 by 5 arrayb = a.tolist() # nested lists with same data, indicesfile_path = "/path.json" ## your path variablejson.dump(b, codecs.open(file_path, 'w', encoding='utf-8'), separators=(',', ':'), sort_keys=True, indent=4) ### this saves the array in .json format为了“unjsonify”数组使用:obj_text = codecs.open(file_path, 'r', encoding='utf-8').read()b_new = json.loads(obj_text)a_new = np.array(b_new)

郎朗坤

一些其他numpy编码器似乎有点过于冗长。检查对象是否来自模块numpy,如果是,则ndarray.tolist用于a ndarray或.item用于任何其他numpy特定类型。使用json.dumps defaultkwarg:default应该是为无法以其他方式序列化的对象调用的函数。import numpy as npdef default(obj):     if type(obj).__module__ == np.__name__:         if isinstance(obj, np.ndarray):             return obj.tolist()         else:             return obj.item()     raise TypeError('Unknown type:', type(obj))dumped = json.dumps(data, default=default)
打开App,查看更多内容
随时随地看视频慕课网APP