使用 pydantic json dump 进行漂亮的打印

问题描述 投票:0回答:1

我有一个带有 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]”,

        …
    ]
}

但我不希望每个内部数组都用引号打印。

python json pydantic dump
1个回答
0
投票

这可能对你有用:

import json
from pydantic.json import pydantic_encoder

json.dump(your_pydantic_model.model_dump(), file_obj, default=pydantic.encoder, indent=4)
© www.soinside.com 2019 - 2024. All rights reserved.