Мне нужно было бы задать вопрос о json serialization of @dataclass
из Make Python json кодировщик поддерживает новые классы данных Python немного дальше: рассмотрите, когда они находятся во вложенной структуре.
Рассмотреть возможность:
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)
Но использование этого метода также не повлияло на результат (ошибка). Любые дополнительные советы?