【发布时间】:2022-01-20 19:28:33
【问题描述】:
我正在处理 JSON API 调用,我想使用 python 数据类来构建它。 由于我是初学者,因此解决方案可能很麻烦 - 在这种情况下 - 请提供更优雅的解决方案。
所以我希望我的 JSON 请求正文如下所示:
{
"projectFilter": {
"project": "all",
"statuses": ["Finished"]
},
"currencyId": 0,
"columns": [
{"columnType": {
"kind": "CostActual"
}
}
]
}
我已将其建模为嵌套数据类,以便将来更改 API 调用。 不确定这是否是一个好方法——正如我所说——这里是初学者。
import json
from dataclasses import dataclass, field
from typing import List, Dict
@dataclass
class _project_filter():
project : str = 'all'
statuses : List = field(default_factory=lambda: ['Finished'])
@dataclass
class _column_type():
columnType : Dict = field(default_factory=lambda: {'kind' : 'CostActual'})
@dataclass
class project():
projectFilter: _project_filter = _project_filter()
currencyId : int = NULL
columns : List[_column_type] = field(default_factory=_column_type)
def to_json(self):
return json.dumps(self.__dict__, default=lambda x: x.__dict__, ensure_ascii=False)
我在调用.to_json() 方法时得到以下输出:
{
"projectFilter": {
"project": "all",
"statuses": ["Finished"]
},
"currencyId": 0,
"columns": {
"columnType": {"kind": "CostActual"}
}
}
如您所见,我没有得到_column_type 类型的数组。
我认为它会起作用,因为我有columns : List[_column_type] = field(default_factory=_column_type)
虽然我将字段columns 指定为_column_type 的list,并且我使用了默认对象,因为我使用了default_factory 参数。
【问题讨论】:
-
提示 1:
_column_type()是否产生List[_column_type]?提示 2:仔细考虑example in the documentation。 -
也就是说,按照初学者的标准,您的一般方法看起来相当复杂。我非常喜欢“鸭子打字工作得很好,谢谢,我不想花时间在注释上”阵营,但这让我有理由更认真地看待新的
dataclass支持。
标签: python json python-3.x python-dataclasses