2015-11-04 1 views
3

Je souhaite sérialiser les résultats d'une requête de base de données dans JSON. Chaque rangée a un certain nombre de colonnes, avec j'ajoute à un dict. Les colonnes sont dans un certain ordre, mais lorsque je sérialise les données, l'ordre change. J'ai essayé d'utiliser un OrderedDict, mais toujours vu le même problème. Comment puis-je maintenir l'ordre des colonnes?Conserver l'ordre lors du vidage de dict vers JSON

res = {'a': i[0], 'b': i[1], 'c': i[2]} 
return jsonify(res=res) 
res = OrderedDict() 
res['a'] = i[0] 
res['b'] = i[1] 
res['c'] = i[3] 
return jsonify(res=res) 
+6

Les dictionnaires ne garantissent pas la commande. Vous pouvez essayer un 'OrderedDict', mais je ne sais pas comment' jsonify' le prendra - mieux vaut utiliser une structure de données ordonnée si l'ordre compte, – jonrsharpe

+0

J'ai essayé d'utiliser OrderedDict mais toujours pas de chance! s'il vous plaît vérifier ma mise à jour post – 90abyss

+0

trier le json par des clés plus tard. Jsonify clobbers l'ordre dict. – economy

Répondre

2

dicts Python et les objets JSON ont pas d'ordre, donc il n'y a aucun moyen direct de le faire. En Python, OrderedDict maintient l'ordre d'insertion, mais il n'y a aucun équivalent dans JSON. Vous pouvez convertir le dict en une liste de ses éléments, puisque les listes sont commandées.

data = OrderedDict() 
data['a'] = 1 
data['b'] = 2 
jsonify(data=list(data.items())) 

Si vous avez besoin de savoir que cette liste particulière est en fait un dict commandé, vous pouvez utiliser un système de marquage pour marquer le type de chaque valeur. Cela devient considérablement plus compliqué. Vous pouvez trouver un exemple dans Flask's session serializer.