Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何自定义simplejson.dumps()中的默认字节处理?_Python_Python 3.x_Simplejson - Fatal编程技术网

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"}