【问题标题】:How to convert Class Object to JSON in Python如何在 Python 中将类对象转换为 JSON
【发布时间】:2021-08-09 18:51:18
【问题描述】:
import json

class Abc:

    firstName = ''
    secondName = ''

obj = Abc()

obj.firstName = 'Raj'

res = json.dumps(obj, default=lambda o: o.__dict__)

print(res)

输出:{"firstName": "Raj"}

但我需要这样的输出

{"firstName": "Raj", "secondName": ""}

有什么解决办法吗??

【问题讨论】:

  • 尝试给类一个构造函数并创建为成员字段。例如:this.firstName = ''this.secondName = ''
  • 这能回答你的问题吗? How to make a class JSON serializable
  • 对于只包含数据而没有接口的简单类,您可能有兴趣查看dataclasses

标签: python json python-class


【解决方案1】:

首先,从正确的类定义开始。

class Abc:
    def __init__(self, first='', second=''):
        self.firstName = first
        self.secondName = second

然后定义一个合适的JSONEncoder子类:

import json


class AbcEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Abc):
            return {"firstName": obj.firstName, "secondName": obj.secondName}
        return super().default(obj)


obj = Abc("Raj")
res = json.dumps(obj, cls=AbcEncoder)

【讨论】:

  • 不是你的反对者,但如果我这样做,那是因为这个问题和答案已经重复了
  • 我不能使用这个 AbcEncoder 方法,因为在我的程序类中包含 30 个变量......我给出了一个简单的问题来理解问题
  • 我看不出变量的数量有什么关系。
  • @Civs 很公平,尽管我认为需要指出类定义。 (例如,欺骗中的一个答案建议将实例的__dict__ 属性传递给json.dumps,但这并不适用,因为原始代码中的secondName 是一个类属性,不会在@987654327 中@.)
  • (我kind希望json支持__to_json____from_json__钩子,你可以添加到你的类中,但我还没有真正想到什么问题这可能会引入。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 2014-05-17
  • 2017-12-27
相关资源
最近更新 更多