Как записать словарь в json файл python
Перейти к содержимому

Как записать словарь в json файл python

Чтение и сохранение в файл списков и словарей в Python.

Строки могут быть легко записаны и считаны из файла. Числа требуют немного больше усилий, так как метод file.read() возвращает только строки, которые должны быть переданы функции int() , которая принимает строку типа '123' и возвращает ее числовое значение 123 . Когда вы хотите сохранить более сложные типы данных, такие как вложенные списки и словари, разбор и сериализация вручную усложняются.

Вместо того, чтобы пользователи постоянно писали и отлаживали код для сохранения сложных типов данных в файлы, Python позволяет использовать популярный формат обмена данными, называемый JSON (JavaScript Object Notation). Стандартный модуль, называемый json , может принимать иерархии данных Python и преобразовывать их в строковые представления. Этот процесс называется сериализацией. Восстановление данных из строкового представления называется десериализацией. Между сериализацией и десериализацией строка, представляющая объект, может быть сохранена в файле или отправлена по сетевому соединению на какой-либо удаленный компьютер.

Если у вас есть объект x , вы можете просмотреть его строковое представление JSON с помощью простой строки кода:

Другой метод этого модуля json.dump() просто сериализует объект в текстовый файл. Итак, если объект fp текстового файла открыт для записи, мы можем сделать следующее:

Чтобы снова декодировать объект, если fp это объект текстового файла, который был открыт для чтения:

Этот простой метод сериализации может обрабатывать списки и словари, но сериализация произвольных экземпляров классов в JSON требует дополнительных усилий.

Дополнительно смотрите встроенный модуль pickle . В отличие от JSON , pickle — это протокол, который позволяет сериализовать произвольно сложные объекты Python.

Протокол pickle специфичен для Python и не может использоваться для связи с приложениями, написанными на других языках. Он также по умолчанию небезопасен! Десериализация данных pickle , поступающих из ненадежного источника, может выполнить произвольный код, если данные были созданы опытным злоумышленником.

Работа с JSON в Python

JSON (JavaScript Object Notation) — текстовый формат обмена данными, удобный для чтения и написания как человеком, так и компьютером. Он основан на подмножестве языка программирования JavaScript.

JSON основан на двух структурах данных:

  • Коллекция пар ключ-значение (объект)
  • Упорядоченный список значений (массив)

Это универсальные структуры данных. Почти все современные языки программирования поддерживают их в какой-либо форме. В нотации JSON это выглядит так:

Объект — неупорядоченный набор пар ключ-значение. Объект начинается с <и заканчивается >. Ключ и значение разделяются двоеточием, сами пары ключ-значение разделяются запятой.

Массив — упорядоченная коллекция значений. Массив начинается с [ и заканчивается ]. Значения разделены запятой.

Значение может быть строкой в двойных кавычках, числом, true , false , null , объектом или массивом. Эти структуры могут быть вложенными.

Строка — коллекция нуля или больше символов Unicode, заключенная в двойные кавычки, используя \ (обратную косую черту) в качестве символа экранирования. Для представления числа используется только десятичная система счисления.

How to dump a dict to a JSON file?

I can’t figure out how to dump the dict to a JSON file as showed below:

Is there a pythonic way to do this?

You may guess that I want to generate a d3 treemap.

user avatar

7 Answers 7

This is an easier way to do it.

In the second line of code the file result.json gets created and opened as the variable fp .

In the third line your dict sample gets written into the result.json !

user avatar

Combine the answer of @mgilson and @gnibbler, I found what I need was this:

It this way, I got a pretty-print json file. The tricks print >> f, j is found from here: http://www.anthonydebarros.com/2012/03/11/generate-json-from-sql-using-python/

Of course, it’s unlikely that the order will be exactly preserved . But that’s just the nature of dictionaries .

user avatar

This should give you a start

user avatar

with pretty-print format:

Also wanted to add this (Python 3.7)

Update (11-04-2021): So the reason I added this example is because sometimes you can use the print() function to write to files, and this also shows how to use the indentation (unindented stuff is evil!!). However I have recently started learning about threading and some of my research has shown that the print() statement is not always thread-safe. So if you need threading you might want to be careful with this one.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *