TypeError: Object of type bytes is not JSON serializable

笔者将mat文件用python读取数据之后,得到一个字典数组,笔者想将这个字典数组储存到json文件中,因此应该先编码json数据,因此用到了json.dumps函数进行编码,但是我使用json.dumps函数时发现有会出现问题:
TypeError: Object of type 'bytes' is not JSON serializable

后来查阅相关资料才发现,默认的编码函数很多数据类型都不能编码,因此可以自己写一个encoder去继承jsonencoder ,这样就能够进行编码了。

class MyEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, bytes):
            return str(obj, encoding='utf-8');
        return json.JSONEncoder.default(self, obj)

后面在编码的时候发现出现类似问题:

TypeError: Object of type 'ndarray' is not JSON serializable

这样也是一样的处理方式,当检查到了ndarray数据,把它转化成list数据就行:

class MyEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, np.ndarray):
            return obj.tolist()
        elif isinstance(obj, bytes):
            return str(obj, encoding='utf-8');
        return json.JSONEncoder.default(self, obj)

放一下最后的代码,供大家参考一下:

import scipy.io as sio
import os
import json
import numpy as np
 
load_fn = '2%.mat'
load_data = sio.loadmat(load_fn)
print(load_data.keys())
 
class MyEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, np.ndarray):
            return obj.tolist()
        elif isinstance(obj, bytes):
            return str(obj, encoding='utf-8');
        return json.JSONEncoder.default(self, obj)
 
save_fn = os.path.splitext(load_fn)[0] + '.json'
file = open(save_fn,'w',encoding='utf-8');
file.write(json.dumps(load_data,cls=MyEncoder,indent=4))
file.close()

猜你喜欢

转载自blog.csdn.net/qq_43081842/article/details/112341084
今日推荐