№23 Модуль JSON / Уроки по Python для начинающих

Предыдущий урок: Даты в Python

JSON является синтаксисом для хранения и обмена данными. JSON — это текст, написанный в стиле объекта JavaScript.

JSON в Python

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

import json

Полная документация по модулю JSON для Python 3 на русском: Модуль JSON Python для работы с форматом .json

Конвертация из JSON в Python

Если у вас есть строка JSON, вы можете провести над ней парсинг с помощью метода json.loads ().
Как результат, будет словарь python.
Конвертируем из JSON в Python:

import json

# немного JSON:
x = '{"name":"Viktor", "age":30, "city":"Minsk"}'
# парсинг x:
y = json.loads(x)
# результатом будет словарь Python:
print(y["age"])

Вывод:

30

Конвертировать из Python в JSON

Если у вас есть объект Python, вы можете преобразовать его в строку JSON с помощью метода json.dumps().

import json

# создаем словарь x:
x = {
"name": "Viktor",
"age": 30,
"city": "Minsk"
}
# конвертируем в JSON: 
y = json.dumps(x)
# в результате получаем строк JSON:
print(y)

Вывод:

{"name": "Viktor", "age": 30, "city": "Minsk"}

Вы можете преобразовать следующие типов объекты Python в строки JSON:

  • dict
  • list
  • tuple
  • string
  • int
  • float
  • True
  • False
  • None

Конвертируем объекты Python в строки JSON и выведите значения:

import json
  
print(json.dumps({"name": "Viktor", "age":  30}))
print(json.dumps(["Porsche", "BMW"]))
print(json.dumps(("Porsche", "BMW")))
print(json.dumps("hello"))
print(json.dumps(42))
print(json.dumps(31.76))
print(json.dumps(True))
print(json.dumps(False))
print(json.dumps(None))

Вывод:

{"name": "Viktor", "age": 30}
["Porsche", "BMW"]
["Porsche", "BMW"]
"hello"
42
31.76
true
false
null

Когда вы конвертируете из Python в JSON, объекты Python преобразуются в эквивалент JSON:

PythonJSON
dictObject
listArray
tupleArray
strString
intNumber
floatNumber
Truetrue
Falsefalse
Nonenull

Конвертируйте объект Python, содержащий все типы конвертируемых данных:

import json

x = {
"name": "Viktor",
"age": 30,
"married": True,
"divorced": False,
"children": ("Anna","Bogdan"),
"pets": None,
"cars": [
{"model": "BMW 230", "mpg":  27.5},
{"model": "Ford Edge", "mpg": 24.1}  
]
}
print(json.dumps(x))

Вывод:

{"name": "Viktor", "age": 30, "married": true, "divorced": false, "children": ["Anna", "Bogdan"], "pets": null, "cars": [{"model": "BMW 230", "mpg": 27.5}, {"model": "Ford Edge", "mpg": 24.1}]}

Как конвертировать кириллицу

Если в данных Python есть символы кириллицы, метод json.dumps() преобразует их с кодировкой по умолчанию. Что бы сохранить кириллицу используйте параметр ensure_ascii=False

import json

x = {
"name": "Виктор"
}
y = {
"name": "Виктор"
}
print(json.dumps(x))
print(json.dumps(y, ensure_ascii=False))

Вывод:

{"name": "\u0412\u0438\u043a\u0442\u043e\u0440"}
{"name": "Виктор"}

Форматирование результата

В приведенном выше примере выводится строка JSON, но читать ее не так просто, без отступов и переносов строк.

У метода json.dumps() есть параметры, облегчающие чтение результата.
Используем параметр indent для определения количества отступов:

json.dumps(x, indent=4) 

Вы также можете определить разделители, значение которых по умолчанию — ,, :, где запятая и пробел используются для разделения каждого объекта, а двоеточие и пробел — для разделения ключей и значений.
Используем параметр separators чтобы изменить разделитель по умолчанию:

json.dumps(x, indent=4, separators=(". ", " = "))

Упорядочивание результата

Метод json.dumps() имеет параметры для упорядочивания ключей в результате.
Используем параметр sort_keys чтобы указать, должен ли сортироваться результат.

json.dumps(x, indent=4, sort_keys=True)

Далее: Регулярные выражения в Python