gpt4 book ai didi

python - 为什么 pydantic 不在 json 中对我的 bool 进行编码?

转载 作者:行者123 更新时间:2023-12-04 12:56:15 49 4
gpt4 key购买 nike

我想让 Pydantic 将 bool 值写为“y”或“n”。 Pydantic documentation on encoders建议我可以配置一种根据数据类型对值进行编码的方法,在我的例子中 bool .

from pydantic import BaseModel

class MyStuff(BaseModel):
do_it: bool = False

class Config:
json_encoders = {
bool: lambda b: "y" if b else "n",
}

ms = MyStuff()
print(ms.json(exclude_defaults=False))
当我运行这个时,我得到

{"do_it": false}


当我预期

{"do_it": "n"}


其他尝试:
  • 我是否指定默认值并不重要。
  • 我无法让它适用于其他基本数据类型,例如 int或者,但它确实适用于 pathlib.Path .
  • 如果我更换 lambda 也不起作用具有这样的功能:
  • def convert_my_bool(b: bool) -> str:
    if b:
    return "y"
    return "n"

    class MyStuff(BaseModel):
    do_it: bool

    class Config:
    json_encoders = {
    bool: convert_my_bool,
    }
    我在这里缺少什么?我需要怎么写我的 Config将我的模型中的 bool 值写为“y”或“n”?

    最佳答案

    import orjson
    from pydantic import BaseModel


    def orjson_dumps(v, *, default=None):
    for key, value in v.items():
    if isinstance(value, bool):
    v[key] = "y" if value else "n"

    return orjson.dumps(
    v,
    default=default,
    ).decode()


    class MyStuff(BaseModel):
    do_it: bool = False

    class Config:
    # Change default json encoders/decoders to orjson ones
    json_loads = orjson.loads
    json_dumps = orjson_dumps


    ms = MyStuff()
    print(ms.json(exclude_defaults=False))

    关于python - 为什么 pydantic 不在 json 中对我的 bool 进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66974962/

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