Я написал следующий код Python для заполнения файла JSON.
import json
data = {}
data['people'] = []
for i in range(0,3):
data['people'].append({
'name': 'C%d'%(i),
'div':i,
'from': 'City%d'%(i)
})
with open('data.txt', 'w') as outfile:
json.dump(data, outfile)
Тем не менее, мой файл JSON выглядит примерно так:
{"people": [{"div":0,"from":,"City0":"name":"C0"},{"div":0,"from":,"City0":"name":"C0"}]}
Мой порядок ввода отличается от вывода. В чем причина и как мне это исправить?
Какую версию Python вы используете? Вы создаете dict, но до Python 3.6 порядок вставки не сохраняется. В Python 3.6 порядок вставки сохраняется, но он учитывает детали реализации и на него не следует полагаться. В Python 3.7 была объявлена природа сохранения порядка вставки объектов dict как официальная часть спецификации языка Python. Если вы используете версию Python ниже 3.7, используйте OrderedDict из коллекций.
import json
from collections import OrderedDict
data = {}
data['people'] = []
for i in range(0,3):
data['people'].append(OrderedDict((
('name', 'C%d' %(i)),
('div', i),
('from', 'City%d'%(i))
)))
with open('data.json', 'w') as outfile:
json.dump(data, outfile)
Кстати, почему расширение файла txt, а не json? Это не имеет значения и не связано с вашей проблемой, но мне любопытно.
Причина, по которой вы выводите данные, заключается в том, что json файлам действительно все равно, в каком порядке они находятся, они содержат данные и используются по сравнению с файловым каталогом. Пока вы можете получить к файлу, и это на самом деле файл, все хорошо. Вы более или менее хотите, чтобы это было именно так, как вы вводите это, что было бы невозможно с json.dumps. Если вам это абсолютно необходимо, я бы просто сделал строку string='''{"people": [{#arange in order you want it}]}'''
и сохраните его как любой другой файл.
Если вы хотите отсортировать свой JSON, попробуйте что-нибудь, что я нашел здесь Сортировка JSON