我使用 Flask (python) 发布表单时收到的 MultiDict (ImmutableMultiDict) 是
ImmutableMultiDict([
('disabled', 'False'),
('disabled', 'False'),
('debet', '11'),
('debet', '21'),
('date', '2016-11-17'),
('kredit', '12'),
('kredit', '22'),
('record', '1901'),
('record', '1902'),
('description', 'Sales of inventory')
])
我发布的表格看起来像
<form method="POST" action="/post">
<input name="description" value="Sales of inventory" />
<input name="date" value="2016-11-17" />
<div class="group">
<input name="record" value="1901" />
<input name="debet" value="11" />
<input name="kredit" value="12" />
<input name="disabled" value="False" />
</div>
<div class="group">
<input name="record" value="1902" />
<input name="debet" value="21" />
<input name="kredit" value="22" />
<input name="disabled" value="False" />
</div>
</form>
我想将此表单(不包括描述和日期)输入转换为如下所示的 JSON 格式
data = [
{
"record": 1901,
"debet": 11,
"kredit": 12,
"disabled": False
},
{
"record": 1902,
"debet": 21,
"kredit": 22,
"disabled": False
}
]
有什么好的方法吗?我已经尝试了很多东西,但我无法正确理解。
最佳答案
如果你绝对不能改变数据的发送方式,并且你确定数据总是按照与表单相同的顺序发送(确保这一点,否则无法分辨哪些值一起去),那么你可以这样做:
fields = ['record', 'debet', 'kredit', 'disabled']
num_values = len(form_data.getlist(fields[0]))
data = []
for i in range(num_values):
data.append({field: form_data.getlist(field)[i] for field in fields})
但是,我不会推荐这个。归根结底,您是以某种方式动态生成新的输入,因为看起来您的字段数量是动态的,所以为什么不直接将名称更改为 record1、record2 等。正在做这个吗?
关于python - 将 MultiDict 转换为正确的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40657535/