我的身体看起来像这样:
{
"data": [
{
"my_api": {
"label": "First name",
"value": "Micheal"
}
},
{
"my_api": {
"label": "Last name",
"value": [
"Jackson"
]
}
},
{
"my_api": {
"label": "Favourite colour",
"value": "I don't have any"
}
}
]
}
这是我迄今为止的model.py
:
class DictParameter(BaseModel): # pylint: disable=R0903
"""
`my_api` children
"""
label: Optional[str]
value: Optional[str]
class DataParameter(BaseModel): # pylint: disable=R0903
"""
`data` children
"""
my_api: Optional[dict]
class InputParameter(BaseModel): # pylint: disable=R0903
"""
Takes predefined params
"""
data: Optional[List[DataParameter]]
在main.py
中:
from model import InputParameter
@router.post("/v2/workflow", status_code=200)
def get_parameter(user_input: InputParameter):
"""
Version 2 : No decoding & retrieve workflow params
"""
data = user_input.data
print(data)
输出:
[DataParameter(my_api={'label': 'First name', 'value': 'Micheal'}), DataParameter(my_api={'label': 'Last name', 'value': ['Jackson']}), DataParameter(my_api={'label': 'Favourite colour', 'value': "I don't have any"})]
我想访问my_api
键内的值。但我一直收到类型错误。我不知道如何访问嵌套子项的字典列表。另外,value
的值可以是str
或array
。它是动态的
还有别的方法吗
您当前拥有的将把单个元素列表强制转换为strs,这可能是您想要的。如果希望列表保持为列表,请使用:
除非您幸运地运行了Python3.10,否则
str | list[str]
是等效的但是,您实际上并不使用此模型!您有
my_api: Optional[dict]
而不是my_api: Optional[DictParameter]
,因此您当前的输出是一个普通的旧dict,您需要执行data[0].my_api["value"]
。目前,这返回一个str或列表,这可能是问题所在。不过,我怀疑您是想使用pydantic模式请注意,数据是一个列表:如果您想要迭代所有需要的值,请执行以下操作
相关问题 更多 >
编程相关推荐