jav*_*dba 14 python json-serialization python-dataclasses
我需要 进一步回答有关使 Python json 编码器支持 Python 的新数据类的问题:考虑它们何时处于嵌套结构json serialization of @dataclass中。
考虑:
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)
Run Code Online (Sandbox Code Playgroud)
这给了我们:
TypeError: Object of type Prod is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
请注意,上面确实包含了答案之一/sf/answers/4178169831/。它声称通过装饰器支持嵌套案例dataclass_json。显然这实际上行不通。
我还尝试了另一个答案/sf/answers/3590072461/:
class EnhancedJSONEncoder(json.JSONEncoder):
def default(s, o):
if dataclasses.is_dataclass(o):
return dataclasses.asdict(o)
return super().default(o)
Run Code Online (Sandbox Code Playgroud)
我为它创建了一个辅助方法:
def jdump(s,foo):
return json.dumps(foo, cls=s.c.EnhancedJSONEncoder)
Run Code Online (Sandbox Code Playgroud)
但使用该方法也不会影响(错误)结果。还有其他提示吗?
ast*_*key 11
您可以使用pydantic图书馆。从文档中的示例
from pydantic import BaseModel
class BarModel(BaseModel):
whatever: int
class FooBarModel(BaseModel):
banana: float
foo: str
bar: BarModel
m = FooBarModel(banana=3.14, foo='hello', bar={'whatever': 123})
# returns a dictionary:
print(m.dict())
"""
{
'banana': 3.14,
'foo': 'hello',
'bar': {'whatever': 123},
}
"""
print(m.dict(include={'foo', 'bar'}))
#> {'foo': 'hello', 'bar': {'whatever': 123}}
print(m.dict(exclude={'foo', 'bar'}))
#> {'banana': 3.14}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19788 次 |
| 最近记录: |