Python 3中如何将字典转为JSON二进制字符串?ujson.dumps无效
解决Python字典转JSON二进制字符串的问题
这个问题我之前也碰到过,其实核心是搞清楚ujson.dumps()的返回类型和你需要的二进制字符串之间的区别:在Python3中,ujson.dumps()默认返回的是Unicode字符串(str类型),而你要的b'...'是字节序列(bytes类型),所以需要多一步编码操作,或者用另一种方式生成字节流。
下面给你两种可行的方法:
方法一:对dumps结果直接编码
这是最直观的方式,先让ujson生成JSON字符串,再用UTF-8编码转换成二进制:
import ujson d = {'1': 'myval', '2': 'myval2'} # 先得到JSON格式的字符串 json_str = ujson.dumps(d) # 将字符串编码为二进制字节流(默认用utf-8即可) json_binary_str = json_str.encode('utf-8')
执行后json_binary_str就是你需要的b'{"1": "myval", "2": "myval2"}'(具体格式可能因ujson的缩进设置略有不同,但内容一致)。
方法二:用dump写入BytesIO获取二进制
如果你不想先生成字符串再编码,也可以直接把字典序列化到字节缓冲区里:
import ujson from io import BytesIO d = {'1': 'myval', '2': 'myval2'} # 创建一个字节缓冲区 buffer = BytesIO() # 把字典序列化到缓冲区中 ujson.dump(d, buffer) # 从缓冲区获取二进制内容 json_binary_str = buffer.getvalue()
这种方式跳过了中间的字符串步骤,直接生成字节流,适合处理大字典时节省内存。
另外补充一点:不止ujson,Python标准库的json模块也是同样的逻辑——json.dumps()返回str,编码后得到bytes;json.dump()可以写入文件对象,包括BytesIO。
内容的提问来源于stack exchange,提问作者tensor
相关产品推荐
相关产品推荐

