輸入以下資料
data = {
'campaigns': [
{
'title': 'GBP',
'geo_segment': 'WW',
'ac_type': 'Value',
'conversion': 'soft',
'asset_type': 'ALL',
'date': '22.04.21',
'name': 'GBP_WW_1_core_22.04.21',
'budget': '2000',
'cpa': '1,00'
}
],
'stages': [
'pre',
'post'
],
'language_mode': 'all_en'
}
決議campaigns,我使用parse_obj()方法
campaigns = parse_obj_as(List[CampaignData], data['campaigns'])
class CampaignData(BaseModel):
title: NonEmptyString
geo_segment: NonEmptyString
......
有用。
如何驗證不是型別的其余資料( stages:List,language_mode:)?strdict
class GoogleCheckCampaignStages(BaseModel):
stages: List[str]
class GoogleCheckLanguageMode(BaseModel):
language_mode: str
如果我跑
stages = parse_obj_as(List[GoogleCheckCampaignStages], data['stages'])
回傳
value is not a valid dict (type=type_error.dict)
與 相同的結果data['language_mode']。
如果我嘗試使用parse_raw_as()方法
parse_raw_as(GoogleCheckLanguageMode, data['language_mode'])
回傳
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
那么如何決議str和list取值呢?
uj5u.com熱心網友回復:
您遇到的錯誤是因為您傳入的data["stages"]只是一個串列/陣列。它沒有呼叫鍵stages,因此 Pydantic 不知道如何分配它。
假設NonEmptyString定義如下,我建議創建一個處理整個data物件的模型,例如:
from pydantic import BaseModel, parse_obj_as, constr
from typing import List
NonEmptyString = constr(min_length=1)
class CampaignData(BaseModel):
title: NonEmptyString
geo_segment: NonEmptyString
# and so on ...
class Data(BaseModel):
campaigns: List[CampaignData]
stages: List[str]
language_mode: str
parsed_data = parse_obj_as(Data, data)
print(parsed_data)
# campaigns=[CampaignData(title='GBP', geo_segment='WW', ...)] stages=['pre', 'post'] language_mode='all_en'
如果您只想訪問特定元素,您可以輕松地這樣做:
print(parsed_data.stages)
# ['pre', 'post']
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/446440.html
上一篇:印度語言字符的Unicode范圍
