【问题标题】:How to make a JSON object serializable [duplicate]如何使 JSON 对象可序列化 [重复]
【发布时间】:2013-09-04 07:38:37
【问题描述】:

有没有办法在不使用自定义编码器的情况下序列化 python 类?我尝试了以下方法,但出现错误:TypeError: hello is not JSON serializable 这很奇怪,因为“hello”是一个字符串。

class MyObj(object):

    def __init__(self, address):
        self.address = address

    def __repr__(self):
        return self.address 

x = MyObj("hello")

print json.dumps(x)

输出应该很简单

"hello"

【问题讨论】:

    标签: python json serialization


    【解决方案1】:

    jsonpickle怎么样?

    jsonpickle 是一个用于序列化和反序列化的 Python 库 与 JSON 之间的复杂 Python 对象。

    >>> class MyObj(object):
    ...     def __init__(self, address):
    ...         self.address = address
    ...     def __repr__(self):
    ...         return self.address 
    ... 
    >>> x = MyObj("hello")
    >>> jsonpickle.encode(x)
    '{"py/object": "__main__.MyObj", "address": "hello"}'
    

    【讨论】:

    • json 输出是 restful API 的一部分,因此我需要仔细控制格式。在这个例子中,输出应该是简单的“hello”。
    【解决方案2】:
    import json
    
    class MyObj(object):
    
        def __init__(self, address):
            self.address = address
    
        def __repr__(self):
            return self.address
    
        def serialize(self, values_only = False):
            if values_only:
                return self.__dict__.values()
            return self.__dict__
    
    x = MyObj("hello")
    
    print json.dumps(x.serialize())
    print json.dumps(x.serialize(True))
    

    输出

    >>> 
    {"address": "hello"}
    ["hello"]
    

    【讨论】:

    • 如果对象位于另一个结构(如字典)中,则此方法不起作用,如 foo = { 'obj' : x } 然后 json.dumps(foo)
    猜你喜欢
    • 2013-03-26
    • 2019-06-20
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 2014-04-12
    • 2019-08-29
    • 1970-01-01
    • 2017-12-30
    相关资源
    最近更新 更多