如何在python中json序列化对象

时间:2012-06-24 02:48:00

标签: python json

python是否支持随机json序列化?我收到这个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "commands.py", line 36, in toJson
    return json.dumps(self)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 201, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 264, in iterencode
    return _iterencode(o, 0)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 178, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <commands.SampleCommand object at 0x105d957d0> is not JSON serializable

段:

class SampleCommand(Command):
    def __init__(self,message=None):
        super(Command, self).__init__()
        pass

    def parse(self):
        pass

    def toJson(self):
        return json.dumps(self)

1 个答案:

答案 0 :(得分:10)

默认情况下,python中的json只能处理某些对象,如字典,列表和基本类型,如整数,字符串等,以便您需要定义自己的序列化方案的更复杂类型

>>> help(json)
Extending JSONEncoder::

    >>> import json
    >>> class ComplexEncoder(json.JSONEncoder):
    ...     def default(self, obj):
    ...         if isinstance(obj, complex):
    ...             return [obj.real, obj.imag]
    ...         return json.JSONEncoder.default(self, obj)
    ...
    >>> dumps(2 + 1j, cls=ComplexEncoder)
    '[2.0, 1.0]'
    >>> ComplexEncoder().encode(2 + 1j)
    '[2.0, 1.0]'
    >>> list(ComplexEncoder().iterencode(2 + 1j))
    ['[', '2.0', ', ', '1.0', ']']