Могу ли я заставить JSON загружаться в OrderedDict?
Хорошо, я могу использовать OrderedDict в json.dump. То есть OrderedDict можно использовать как входные данные для JSON.
Но можно ли его использовать как выходные данные? Если да, то как? В моем случае я хотел бы load в OrderedDict, чтобы я мог сохранить порядок ключей в файле.
Если нет, есть ли какой-нибудь обходной путь?
Переведено автоматически
Ответ 1
Да, вы можете. Указав object_pairs_hook аргумент для JSONDecoder. Фактически, это точный пример, приведенный в документации.
Отличные новости! Начиная с версии 3.6, реализация CPython сохранила порядок вставки словарей (https://mail.python.org/pipermail/python-dev/2016-September/146327.html). Это означает, что библиотека json теперь сохраняет порядок по умолчанию. Обратите внимание на разницу в поведении между python 3.5 и 3.6. Код:
import json data = json.loads('{"foo":1, "bar":2, "fiddle":{"bar":2, "foo":1}}') print(json.dumps(data, indent=4))