【问题标题】:Turn Python object into JSON output [duplicate]将 Python 对象转换为 JSON 输出 [重复]
【发布时间】:2018-01-31 17:45:51
【问题描述】:

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: ma​​in.Multiple object at 0x0149A3F0> is not JSON serializable”

【问题讨论】:

    标签: python json


    【解决方案1】:

    你可以序列化m__dict__属性:

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

    can也叫vars

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

    使用什么以及为什么: Use `__dict__` or `vars()`?


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

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

    强调我的。

    【讨论】:

    • 打败我一秒钟,很好的答案
    • @DanielSanchez 下次:)
    • 最好使用vars
    • @AzatIbrakov,不知道vars 并且有时会为此感到挣扎。这是当天有用的提示,谢谢!
    • @AzatIbrakov:我不同意__dict__ 的情况,因为vars 的重载很恶心。
    猜你喜欢
    • 1970-01-01
    • 2011-11-16
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2015-01-02
    • 1970-01-01
    • 2020-11-02
    相关资源
    最近更新 更多