簡體   English   中英

將 json 導入 pydantic 模型,更改字段名稱

[英]import json to pydantic model, change fiield name

我有來自外部系統的 json,其中包含“system-ip”、“domain-id”等字段。 python中不允許使用這些名稱,所以我想將它們更改為“system_ip”、“domain_id”等。我使用“pydantic”w關鍵字在stackoverflow上閱讀了所有內容,我嘗試了pydantic文檔中的示例,作為最后的手段,我生成了json來自我的 json 的架構,然后使用

datamodel-codegen --input device_schema.json --output model.py

我生成了模型。

生成的模型有這樣的字段

    system_ip: str = Field(..., alias='system-ip')
    host_name: str = Field(..., alias='host-name')
    device_type: str = Field(..., alias='device-type')
    device_groups: List[str] = Field(..., alias='device-groups')

它仍然不起作用。 當我做

with open("device.json") as file:
    raw_device = json.load(file)
d = PydanticDevice(**raw_device)

pydantic 仍然看到“舊”字段名稱,而不是帶注釋的,並且我有錯誤

TypeError: __init__() got an unexpected keyword argument 'system-ip'

我做錯了什么?

因此,為了將來參考,裝飾器@pydantic.dataclass 與從 pydantic BaseModel 繼承做的事情不同

@dataclasses
class VmanageDevice:
    deviceId: str
    system_ip: str = Field(..., alias='system-ip')
    host_name: str = Field(..., alias='host-name')
...

不起作用

class VmanageDevice(BaseModel):
    deviceId: str
    system_ip: str = Field(..., alias='system-ip')
    host_name: str = Field(..., alias='host-name')
    reachability: str
...

很有魅力

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM