Формат json
Формат json¶
Чтение строк из файлов не составляет труда в python, а вот чтение чисел требует дополнительных усилий, т.к. встроенные функции чтения из данных возвращают строки, которые потом отдельно необходимо приводить к числовому типу данных. Чтение структурированных данных обычными средствами ещё труднее.
Гораздо удобнее использовать для таких целей JSON.
JSON (англ. JavaScript Object Notation, обычно произносится как /ˈdʒeɪsən/ JAY-sən) — текстовый формат обмена данными, основанный на JavaScript. Как и многие другие текстовые форматы, JSON легко читается людьми. Источник: Wikipedia.
JSON изначально был придуман для сериализации объектов языка javascript
, но со временем стал применяться и в других языках программирования.
За работу с JSON
в python отвечает модуль стандартной библиотеки json. Основные функции этого модуля:
json.dumps сериализует объект в строку;
json.dump тоже самое, но сразу записывает в файл;
json.loads десериализует строку
json
и создаёт объект;json.load десериализует содержимое файла
json
.
Встроенные контейнеры list
и dict
очень хорошо подходят для хранения в формате JSON
. Рассмотрим самый простой пример с ними: создадим список и словарь и сериализуем их в строки.
import json
a_list = [1, 1., "a"]
json_list = json.dumps(a_list)
a_dict = {
"key1": "value1",
"key2": "value2"
}
json_dict = json.dumps(a_dict)
print(f"json представление для списка: {json_list}")
print(f"json представление для словаря: {json_dict}")
json представление для списка: [1, 1.0, "a"]
json представление для словаря: {"key1": "value1", "key2": "value2"}
Теперь исходные объекты можно получить обратно.
a_list_recovery = json.loads(json_list)
print(a_list_recovery, type(a_list_recovery))
a_dict_recovery = json.loads(json_dict)
print(a_dict_recovery, type(a_dict_recovery))
[1, 1.0, 'a'] <class 'list'>
{'key1': 'value1', 'key2': 'value2'} <class 'dict'>
Из примера видно, что удалось десериализовать объекты из строки json
в исходном виде. Заметим, что между сериализацией и десериализацией строковое представление объекта могло быть сохранено в файл и прочитано обратно, передано по сети интернет и прочитано другим компьютером и многое другое.
Коллекции в python могут быть вложенными друг в друга и json
без проблем справляется с представлением таких вложенных структур.
import json
import os
course_description = {
"lecturer": "Fadeev Egor",
"course": "Computer technologies workshop",
"topics": ["python3", "scientific libraries", "mathematical modeling"],
"where": {
"Faculty": "Faculty of physics",
"room": "5-42"
},
"when": {
"day of week": "Thursday",
"time": "5:05 pm"
},
"number of students": 25
}
os.makedirs("tmp", exist_ok=True)
with open(os.path.join("tmp", "course_description.json"), "w") as f:
json.dump(course_description, f, indent=4)
Если выполнить предыдущую ячейку, то в папке tmp
должен создаться файл course_description.json
с следующим содержимым (с точностью до порядка ключей).
{
"lecturer": "Fadeev Egor",
"course": "Computer technologies workshop",
"topics": [
"python3",
"scientific libraries",
"mathematical modeling"
],
"where": {
"Faculty": "Faculty of physics",
"room": "5-42"
},
"when": {
"day of week": "Thursday",
"time": "5:05 pm"
},
"number of students": 25
}
Далее этот файл может быть открыт другой программой на python или другом языке или передан по сети и открыт заново.