我有一个带有 2D 数组的 pydantic 模型,当我将其转储到缩进设置为 4 的文件时,我想漂亮地打印它。仅供参考:
import json
from annotated_types import Len
from typing_extensions import Annotated
from pydantic import BaseModel, Field, ConfigDict
TwoDim = Annotated[
Sequence[float],
Len(min_length=2, max_length=2),
]
class Tester(BaseModel):
test_val: Sequence[TwoDim] = Field()
我尝试实现自定义编码器并使用模型的 ConfigDict:
# in the model definition
model_config = ConfigDict(
json_encoders={
TwoDim: NoIndentEncoder().encode
}
)
class NoIndentEncoder(json.JSONEncoder):
def encode(self, obj):
if isinstance(obj, list):
return f”[{‘, ‘.join([json.dumps(elem) for elem in obj])}]”
return super().encode(obj)
这几乎给了我正确的输出(读取为 json 文件):
{
“test_val”: [
“[0.0, 1.2]”,
“[3.0, 1.4]”,
…
]
}
但我不希望每个内部数组都用引号打印。
这可能对你有用:
import json
from pydantic.json import pydantic_encoder
json.dump(your_pydantic_model.model_dump(), file_obj, default=pydantic.encoder, indent=4)