python 2.7 : TypeError: <__main__.nested_object 对象在 0x...> 不能被 JSON 序列化

1 投票
1 回答
740 浏览
提问于 2025-04-18 18:02

我正在尝试对一个嵌套的类或对象使用 json.dumps 方法,但出现了错误,提示TypeError: <__main__.nested_object object at 0x...> 不能被转换为 JSON 格式

我需要在我的类中做什么改动,才能让 json.dumps 方法接受一个 JSONEncoder 的实现作为输入参数呢?

下面是一个非常简单的代码示例,模拟了这个问题:

class leaf_object(object):
    def __init__(self, s):
        self.value = s

class nested_object(object):
    def __init__(self, a, b_list):
        self.a = a
        self.b_list = b_list

if __name__ == "__main__":
    obj = nested_object('a1', [leaf_object('a1.1'),leaf_object('a1.2')])
    import json
    print(json.dumps(obj))

1 个回答

0

你可以通过创建一个子类 JSONEncoder 来实现你自己的自定义序列化。所以可以使用以下代码:

from json import JSONEncoder

class leaf_object(object):
    def __init__(self, s):
        self.value = s

class nested_object(object):
    def __init__(self, a, b_list):
        self.a = a
        self.b_list = b_list

class MyEncoder(JSONEncoder):
    def default(self, o):
        return o.__dict__
if __name__ == "__main__":
    obj = nested_object('a1', [leaf_object('a1.1'),leaf_object('a1.2')])
    obj=MyEncoder().encode(obj)
    import json
    print(json.dumps(obj))

这是结果:

"{\"a\": \"a1\", \"b_list\": [{\"value\": \"a1.1\"}, {\"value\": \"a1.2\"}]}"

撰写回答