cómo pasar correctamente un objeto json al servidor de flasks usando jquery ajax

Quiero pasar un objeto json que contiene objetos nesteds de mi cliente a mi servidor.

en el lado del cliente, mi estructura de datos se ve así:

var response = {}; response['screening'] = '1'; response['assistance'] = 'wheelchair access'; response['guests'] = {}; response['guests']['1'] = {} response['guests']['1']['first'] = 'John' response['guests']['1']['last'] = 'Smith' response['guests']['2'] = {} response['guests']['2']['first'] = 'Dave' response['guests']['2']['last'] = 'Smith' 

y mi llamada ajax se ve así:

 $.ajax({ type: "POST", url: window.location.pathname, data: response }).done(function( msg ) { alert( "Data Saved: " + msg ); }); 

Después de publicar estos datos en mi servidor, que se ejecuta utilizando el matraz de Python, uso el objeto request.form para inspeccionar lo que se publicó desde el cliente. Me gustaría que los datos se estructuren de la misma manera, sin embargo, esta es la salida en el servidor:

 ImmutableMultiDict([('guests[1][first]', u'John'), ('screening', u'2'), ('guests[2][last]', u'Smith'), ('guests[2][first]', u'Dave'), ('assistance', u'wheelchair access'), ('guests[1][last]', u'Smith')]) 

Como puede ver, el objeto de respuesta [‘invitados’] se aplanó, y todos sus hijos, como:

‘invitados [2] [primero]’

… son solo cadenas, no elementos de la respuesta de los padres [‘invitados’].

¿Existe una mejor manera de enviar este bloque de datos de mi cliente a mi servidor y mantener su estructura correctamente?

¡Gracias!

Puedes enviar tu objeto como una cadena JSON:

 var data = { screening: '1', assistance: 'wheelchair access', guests: [ { first: 'John', last: 'Smith' }, { first: 'Dave', last: 'Smith' } ] }; $.ajax({ type: 'POST', url: window.location.href, data: JSON.stringify(response), dataType: 'json', contentType: 'application/json; charset=utf-8' }).done(function(msg) { alert("Data Saved: " + msg); }); 

Y luego use request.json para acceder a él.

En el lado del cliente, necesita convertir ese objeto javascript en una cadena json. Para hacerlo, puedes usar esto:

 JSON.stringify(my_object) // This will return a string that you can pass in you ajax request 

Luego, en el lado del servidor, necesita convertir ese objeto a un diccionario de python usando el módulo json:

 import simplejson my_new_object = simplejson.loads(my_json) // my_json is my_object from the client (previously called my_object) 

my_new_object ahora es un diccionario de python, y puedes hacer lo que quieras con él