Python:如何自定义simplejson.dumps()中的默认字节处理?
在最新版本的Python:如何自定义simplejson.dumps()中的默认字节处理?,python,python-3.x,simplejson,Python,Python 3.x,Simplejson,在最新版本的simplejson中使用simplejson.dumps()时,是否有一种干净的方法可以自定义对bytes对象的处理?(我使用的是3.5.3) 我尝试使用default属性,该属性在json.dumps()和较旧版本的simplejson中运行良好(json格式是为Unicode文本定义的。自己解码字节。以下是和--您可以调用.Decode()改为在字节实例上。我不尝试解码字节对象。它是一个无法解码为文本的二进制对象。因此,您不能将其存储为json格式。任何方法都需要将字节转换为U
simplejson
中使用simplejson.dumps()
时,是否有一种干净的方法可以自定义对bytes
对象的处理?(我使用的是3.5.3)
我尝试使用
default
属性,该属性在json.dumps()
和较旧版本的simplejson
中运行良好(json格式是为Unicode文本定义的。自己解码字节。以下是和--您可以调用.Decode()
改为在字节实例上。我不尝试解码字节对象。它是一个无法解码为文本的二进制对象。因此,您不能将其存储为json格式。任何方法都需要将字节转换为Unicode。这就是为什么我尝试覆盖对它的转换,以便将其转换为特殊格式的字典。确定。调用convert\u to\u special\u format\u dictionary()
而不是上面示例中的.decode()
。查看如何convert\u decimal()
在中使用。您可以提供一个最小的数据
对象作为示例,以及您期望得到的相应json文本,以及当前代码实际得到的内容,以使问题更清楚。
#!/usr/bin/python3.4
import json
import simplejson
from decimal import Decimal
def _encoder(data):
if isinstance(data, bytes):
return 'BYTES!'
if isinstance(data, Decimal):
return 'DECIMAL!'
raise TypeError('No json encoder for {}'.format(type(data)))
data = {'d': Decimal(1), 'b': b'test'}
print(json.dumps(data, default=_encoder))
# works as expected: {"d": "DECIMAL!", "b": "BYTES!"}
print(simplejson.dumps(data, default=_encoder, use_decimal=False))
# does not work for bytes: {"d": "DECIMAL!", "b": "test"}