Предыдущий урок: Даты в 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:
Python | JSON |
---|---|
dict | Object |
list | Array |
tuple | Array |
str | String |
int | Number |
float | Number |
True | true |
False | false |
None | null |
Конвертируйте объект 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)