【Python】Pydantic多字段映射到一个字段

背景

在开发过程中,由于上游数据结构不确定,或者数据结构确定,但大部分相同,部分字段不同(含义相同的情况)

如有时上游给到数据叫【id】,有时叫【code】,为了兼容这种情况,减少coding,我们可以通过Pydantic来解决该问题。

解决方案

旧版本处理方案

python 复制代码
class Foo(BaseModel):
    id: int =Field(..., alias="item_id")
    field1: str
    ...
    
    class Config:
        allow_population_by_field_name = True
# 结果验证
Foo.parse_obj({"item_id": 123, "field1": "value1"})
Foo.parse_obj({"id": 234, "field1": "value1"})

新版本处理方案

参考官方

python 复制代码
class Foo(BaseModel):
    id: int =Field(..., alias="item_id")
    field1: str
    ...
    
    class Config:
        populate_by_name = True

# 或者
class Foo(BaseModel):
    model_config = ConfigDict(populate_by_name=True)
    id: int =Field(..., alias="item_id")
    field1: str
    ...
# 结果验证
Foo.model_validate({"item_id": 123, "field1": "value1"})
Foo.model_validate({"id": 234, "field1": "value1"})
相关推荐
程序员大雄学编程2 分钟前
用Python来学微积分30-微分方程初步
开发语言·python·线性代数·数学·微积分
我爱学习_zwj22 分钟前
App通信:HTTP与JSON全解析
python
机器学习ing.30 分钟前
U-Net保姆级教程:从原理到医学细胞分割实战(PyTorch版)!
人工智能·pytorch·python·深度学习·机器学习
yzx9910131 小时前
基于Django的智慧园区管理系统开发全解析
后端·python·django
sunsunyu031 小时前
视频转图片工具
python·音视频
软件开发技术深度爱好者1 小时前
Python类中方法种类介绍
开发语言·python
用户8356290780512 小时前
使用Python合并Word文档:实现高效自动化办公
后端·python
闭着眼睛学算法2 小时前
【双机位A卷】华为OD笔试之【排序】双机位A-银行插队【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·c语言·javascript·c++·python·算法·华为od
Pocker_Spades_A2 小时前
Python快速入门专业版(五十四):爬虫基石:HTTP协议全解析(从请求到响应,附Socket模拟请求)
爬虫·python·http
DoubleKK3 小时前
Python 中的 json_repair 使用教程:轻松修复大模型返回的非法 JSON
python