gpt4 book ai didi

python - 嵌套数据类的 Json 序列化

转载 作者:行者123 更新时间:2023-12-04 12:24:32 30 4
gpt4 key购买 nike

我需要回答关于 json serialization of @dataclass 的问题来自 Make the Python json encoder support Python's new dataclasses更进一步:考虑它们何时处于嵌套结构中。

考虑:

import json
from attr import dataclass
from dataclasses_json import dataclass_json
@dataclass
@dataclass_json
class Prod:
id: int
name: str
price: float

prods = [Prod(1,'A',25.3),Prod(2,'B',79.95)]
pjson = json.dumps(prods)

这给了我们:
TypeError: Object of type Prod is not JSON serializable

请注意,以上确实包含了其中一个答案 https://stackoverflow.com/a/59688140/1056563 .它声称通过 dataclass_json 支持嵌套案例。装饰器。显然这实际上不起作用。

我还尝试了另一个答案 https://stackoverflow.com/a/51286749/1056563 :
class EnhancedJSONEncoder(json.JSONEncoder):
def default(s, o):
if dataclasses.is_dataclass(o):
return dataclasses.asdict(o)
return super().default(o)

我为它创建了一个辅助方法:
def jdump(s,foo):
return json.dumps(foo, cls=s.c.EnhancedJSONEncoder)

但是使用该方法也没有影响(错误)结果。任何进一步的提示?

最佳答案

import json
from dataclasses import dataclass, asdict


@dataclass
class Prod:
id: int
name: str
price: float


prods = [asdict(Prod(1, 'A', 25.3)), asdict(Prod(2, 'B', 79.95))]
pjson = json.dumps(prods)
print(pjson)
# [{"id": 1, "name": "A", "price": 25.3}, {"id": 2, "name": "B", "price": 79.95}]

关于python - 嵌套数据类的 Json 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61000501/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com