如何在 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 字符串?