2015-11-04 2 views
3

Я хочу сериализовать результаты запроса базы данных к JSON. Каждая строка имеет несколько столбцов, и я добавляю к dict. Столбцы находятся в определенном порядке, но когда я сериализую данные, порядок изменяется. Я попытался использовать OrderedDict, но все же видел ту же проблему. Как я могу поддерживать порядок столбцов?Поддерживать порядок при сбрасывании dict на 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

Словари не гарантируют порядок. Вы можете попробовать «OrderedDict», но я не знаю, как это сделает «jsonify» - лучше использовать упорядоченную структуру данных, если дело касается заказа, – jonrsharpe

+0

Я пробовал использовать OrderedDict, но все равно не повезло! пожалуйста, уточните мой обновленный пост – 90abyss

+0

сортируйте json по ключам позже. jsonify clobbers the dict order. – economy

ответ

2

Python dicts и объекты JSON не имеют порядка, так что нет никакого прямого способа сделать это. В Python OrderedDict поддерживает порядок вставки, но в JSON нет эквивалента. Вы можете преобразовать dict в список его элементов, поскольку списки упорядочены.

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

Если вам нужно знать, что именно этот список на самом деле упорядоченное ДИКТ, вы можете использовать схему маркировки, чтобы пометить тип каждого значения. Это значительно усложняется. Вы можете найти пример этого в Flask's session serializer.

Смежные вопросы