La conversión de los datos del formulario del Frasco a JSON solo obtiene el primer valor

Quiero tomar información de un formulario HTML y dar la salida en formato JSON. Cuando se seleccionan múltiples valores, no se convierten en arreglos JSON, solo se usa el primer valor.

@app.route('/form') def show_form(): return render_template('form.html') @app.route("/result", methods=['POST']) def show_result(): result = request.form return render_template('result.html', result=result) 

form.html :

    thor loki flash batman    

result.html :

 {{ result|tojson }} 

Cuando se seleccionan varios valores para el propietario, “thor” y “flash”, la salida muestra solo un valor:

 {"server": "app-srv", "owners": "thor"} 

Espero que los dueños sean una lista:

 {"server": "app-srv", "owners": ["thor", "flash"]} 

¿Cómo muestro el formulario como JSON sin perder los valores de la lista?

request.form es un MultiDict . Iterar sobre un multidict solo devuelve el primer valor para cada clave. Para obtener un diccionario con listas de valores, use to_dict(flat=False) .

 result = request.form.to_dict(flat=False) 

Todos los valores serán listas, incluso si solo hay un elemento, por coherencia. Si desea aplanar elementos de valor único, debe procesar los datos manualmente. Usa iterlists con una comprensión de iterlists .

 result = { key: value[0] if len(value) == 1 else value for key, value in request.form.iterlists() }