Добавление данных в файл JSON с помощью Python

1

Я написал следующий код 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"}]}

Мой порядок ввода отличается от вывода. В чем причина и как мне это исправить?

  • 1
    Какой заказ? Вы имеете в виду порядок ключей в ваших объектах? Почему это должно иметь значение для вас? AFAIK, согласно спецификации JSON, объекты по своей природе неупорядочены, и вам определенно не следует полагаться на какой-либо конкретный порядок. Если вы заботиться о порядке, используйте массив JSON
Теги:
python-3.x

2 ответа

0

Какую версию 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? Это не имеет значения и не связано с вашей проблемой, но мне любопытно.

0

Причина, по которой вы выводите данные, заключается в том, что json файлам действительно все равно, в каком порядке они находятся, они содержат данные и используются по сравнению с файловым каталогом. Пока вы можете получить к файлу, и это на самом деле файл, все хорошо. Вы более или менее хотите, чтобы это было именно так, как вы вводите это, что было бы невозможно с json.dumps. Если вам это абсолютно необходимо, я бы просто сделал строку
string='''{"people": [{#arange in order you want it}]}'''
и сохраните его как любой другой файл.

Если вы хотите отсортировать свой JSON, попробуйте что-нибудь, что я нашел здесь Сортировка JSON

Ещё вопросы

Сообщество Overcoder
Наверх
Меню