自定义JSONEncoder返回格式不正确的字符串

2024-10-06 11:19:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在实现我自己的JSONEncoder,以便完全按照需要处理不同的类。不幸的是,我的自定义编码器返回了一些格式不正确的字符串。它们被引号包围,某些字符(引号)被转义。在

请使用以下代码重现该行为:

import json

class CustomEncoder(json.JSONEncoder):
    def default(self, givenObject):
        #for testing purposes this always returns the same string
        str = '{"id":0,"name":"Peter"}'
        return str;

class AnyClass(object):
    pass

encoder = CustomEncoder()
dummyClass = AnyClass()

#expected output: {"id":0,"name":"Peter"}
print encoder.encode(dummyClass)

#output: "{\"id\":0,\"name\":\"Peter\"}"

我使用的是python2.7。在

我怎样才能防止这种行为?我做错了什么?在


Tags: nameidjsonencoderoutput格式编码器引号
2条回答

default应该返回一个对象,而不是一个json块:

import json

class CustomEncoder(json.JSONEncoder):
    def default(self, givenObject):
        obj = {"id":0,"name":"Peter"}
        return obj

class AnyClass(object):
    pass

encoder = CustomEncoder()
dummyClass = AnyClass()

print encoder.encode(dummyClass) # {"id": 0, "name": "Peter"}

http://docs.python.org/library/json.html#json.JSONEncoder.default

Implement this method in a subclass such that it returns a serializable object for o, or calls the base implementation (to raise a TypeError).

而不是

    str = '{"id":0,"name":"Peter"}'
    return str;

尝试返回一个对象

^{pr2}$

如前所述,库获取一个字符串,并通过引用它并转义特殊字符将其编码为JSON。在

相关问题 更多 >