将Python对象转换为JSON输出

8

我是一名 Python 新手,尝试定义一个非常简单的类来保存几个值,并将其输出为 JSON 格式。

import json

class Multiple:
    def __init__(self, basis):
            self.double = basis * 2
            self.triple = basis * 3
            self.quadruple = basis * 4


m = Multiple(100)
json.dumps(m)

我希望能看到类似以下的内容:
{
  "double":"200",
  "triple":"300",
  "quadruple":"400"
}

但是却收到一个错误:“TypeError:< main.Multiple object at 0x0149A3F0>不可序列化为JSON”。

1个回答

16
你可以序列化m__dict__属性:
In [214]: json.dumps(m.__dict__)
Out[214]: '{"quadruple": 400, "double": 200, "triple": 300}'

可以还可以调用 vars :

In [216]: json.dumps(vars(m))
Out[216]: '{"quadruple": 400, "double": 200, "triple": 300}'

使用哪个并且为什么: 使用`__dict__`还是`vars()`?


对于更复杂的类,请考虑使用jsonpickle

jsonpickle是一个Python库,用于将复杂的Python对象序列化和反序列化为JSON。标准的Python将Python编码为JSON的库,例如stdlib的jsonsimplejsondemjson,只能处理具有直接JSON等效项(例如dicts、lists、strings、ints等)的Python原语。 jsonpickle在这些库的基础上构建,并允许将更复杂的数据结构序列化为JSON。

强调是我自己加的。


2
打我一下,好答案。 - Netwave
4
使用 vars 更为优越。 - Azat Ibrakov
@AzatIbrakov,之前不知道vars,有时候会遇到困难。这是今天的有用提示,谢谢! - Netwave
@AzatIbrakov:为什么这样做更好? - Ry-
1
@AzatIbrakov:就__dict__的情况而言,我不同意这种做法,因为重载vars很混乱。 - Ry-
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接