【发布时间】:2017-04-01 03:37:16
【问题描述】:
我使用 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
}
]
有什么好办法吗?我已经尝试了很多东西,但我无法正确弄清楚。
【问题讨论】:
-
不,我看不到这样做的好方法。您收到的数据不保留已发布表单的结构。您可以假设每个键中的第一个键与其他键中的第一个键一起出现,第二个键与第二个键一起出现,但我不知道这是否在任何地方都能保证。
-
如果您在表单中使用
input name="record[1]"和input name="record[2]"会怎样?这会改变您收到的ImmutableDict吗? -
Python 和 Flask 不接受 json 格式的 post 消息。回复是
ImmutableMultiDict([('record[2]', '1902'), ('disabled[2]', 'False'), ('record[1]', '1901'), ('date', '2016-11-17'), ('debet[1]', '11'), ('kredit[2]', '22'), ('kredit[1]', '12'), ('debet[2]', '21'), ('description', 'Domännamn'), ('disabled[1]', 'False')]) -
为输入设置正确的字段名称后,您可以自己解析
ImmutableDict。
标签: python json dictionary flask