如何在 Python 中将类对象转换为 JSON

Posted

技术标签:

【中文标题】如何在 Python 中将类对象转换为 JSON【英文标题】:How to convert Class Object to JSON in Python 【发布时间】: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。 【参考方案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__钩子,你可以添加到你的类中,但我还没有真正想到什么问题这可能会引入。)

以上是关于如何在 Python 中将类对象转换为 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Unity3D 中将类对象转换为 JSON 字符串?

如何在python中将字符串数据转换为JSON对象?

如何在python中将csv转换为json?

如何在 Python 中将代理对转换为普通字符串?

如何在 Cython 中将 Python 对象转换为 C++ 类型

如何在python中将JSON转换为数据框