JSON – це широко застосовуваний формат для обміну даними. Python має вбудований модуль JSON, який дозволяє обробляти та аналізувати дані у форматі JSON. У цьому посібнику ви дізнаєтеся все необхідне про роботу з JSON у Python.
Після прочитання цього матеріалу ви зможете:
- ознайомитися з основами JSON;
- навчитися розбирати та генерувати JSON-рядки у Python;
- дізнатися, як читати та записувати JSON-файли за допомогою Python.
Отже, почнемо! 🚀
Що таке JSON?
JSON, що розшифровується як JavaScript Object Notation, є текстовим форматом, призначеним для обміну даними. Хоча JSON спочатку базувався на об’єктах JavaScript, зараз майже всі мови програмування підтримують його використання.
Якщо вам доводилося працювати з API або аналізувати конфігураційні файли, то ви, скоріш за все, вже знайомі з JSON.
📝 Дані у форматі JSON передаються і приймаються при зверненні до API. JSON також широко використовується для взаємодії між клієнтом і сервером у різноманітних додатках. Крім цього, JSON можна використовувати для зберігання різноманітних даних.
Структура JSON дуже схожа на словник Python. Словники в Python – це потужна вбудована структура даних, де дані зберігаються у вигляді пар ключ-значення.
Перш ніж рухатися далі, варто звернути увагу на кілька важливих моментів:
- В Python об’єкт JSON відображається як словник.
- Масив JSON відображається як список Python.
- Логічні значення в JSON (true і false) перетворюються в Python на True і False.
Для глибшого розуміння того, як різні типи даних перетворюються між JSON і Python, рекомендується ознайомитися з офіційною документацією.
Оскільки модуль json є частиною стандартної бібліотеки Python, немає потреби його встановлювати. Ви можете імпортувати його, як показано нижче:
import json
Як завантажити JSON-рядок у Python?
Для завантаження JSON-рядка у Python використовується наступний синтаксис:
<dict_obj> = json.loads(<json_str>)
де:
<dict_obj>
– це словник Python, куди буде завантажений JSON-рядок;<json_str>
– це будь-який коректний JSON-рядок.
Таким чином, вміст <json_str>
буде перетворено та збережено у словнику Python <dict_obj>
.
Розглянемо приклад. json_str
– це рядок, що містить JSON-дані:
json_str = """ { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ] } """
Нижче наведено фрагмент коду, який демонструє, як за допомогою методу loads()
можна завантажити JSON-рядок json_str
у словник Python. Ви можете перевірити, що py_dict
дійсно є словником Python, скориставшись функцією type()
.
py_dict = json.loads(json_str) type(py_dict) # Output: dict print(py_dict) # Output {'books': [{'title': 'The Wind in the Willows', 'author': 'Kenneth Grahame', 'year': '1908'}, {'title': 'To the Lighthouse', 'author': 'Virginia Woolf', 'year': '1927'}]}
Як показано вище, усі поля з JSON-рядка стали парами ключ-значення у словнику py_dict
.
Як створити JSON-рядок у Python?
Припустимо, у вас є словник Python і вам потрібно перетворити його на JSON-рядок. Як це зробити?
Для цього можна скористатися методом dumps()
з наступним синтаксисом:
<json_str> = json.dumps(<dict_obj>)
де:
<dict_obj>
– це словник Python, на основі якого потрібно створити JSON-рядок;<json_str>
– це отриманий JSON-рядок.
Отже, метод dumps()
перетворює словник <dict_obj>
на JSON-рядок <json_str>
.
Давайте додамо до нашого існуючого словника Python py_dict
новий ключ “movies”. Це можна зробити так:
py_dict["movies"] = [{"title":"The Imitation Game","year":"2014", "lang":"en","watched":True}]
Тепер перетворимо оновлений словник у новий JSON-рядок json_str2
, використовуючи метод dumps()
.
json_str2 = json.dumps(py_dict) print(json_str2) # Output {"books": [{"title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908"}, {"title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927"}], "movies": [{"title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true}]}
Як видно з прикладу вище, вихідний JSON-рядок без форматування важко читати. Щоб зробити його більш зрозумілим, можна використати додатковий параметр indent
.
Задавши для indent
ціле число, наприклад 2, ви отримаєте відформатований вивід, як показано нижче:
json_str2 = json.dumps(py_dict, indent = 2) print(json_str2) # Output { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ], "movies": [ { "title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true } ] }
Зверніть увагу, як вивід був відформатований з відступами, що значно полегшує його сприйняття.
Зауваження: 💡 Якщо ви хочете, щоб ключі були відсортовані в алфавітному порядку, встановіть для параметра sort_keys
значення True
.
Як показано у фрагменті коду нижче, тепер ключі відсортовані в алфавітному порядку.
json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True) print(json_str2) # Output { "books": [ { "author": "Kenneth Grahame", "title": "The Wind in the Willows", "year": "1908" }, { "author": "Virginia Woolf", "title": "To the Lighthouse", "year": "1927" } ], "movies": [ { "lang": "en", "title": "The Imitation Game", "watched": true, "year": "2014" } ] }
Тепер ключі розташовані в алфавітному порядку: “author”, “title”, та “year”.
На даний момент ви навчилися працювати з JSON-рядками у Python. У наступному розділі ми розглянемо, як працювати з JSON-файлами.
Як читати JSON-файл у Python?
Для читання JSON-файлу у Python використовується наступний синтаксис:
json.load(<json-file>) # where <json-file> is any valid JSON file.
Зверніть увагу, що використовується метод load()
, а не loads()
. loads()
використовується для завантаження JSON-рядка, тоді як load()
– для завантаження JSON-файлу.
При роботі з файлами в Python рекомендується використовувати менеджери контексту. Ось приклад читання файлу без використання контекстного менеджера:
my_file = open('students.json','r') contents = my_file.read() print(contents) file.close()
Якщо не закривати файл, це може призвести до витоку ресурсів.
Натомість при використанні контекстних менеджерів файли автоматично закриваються після завершення операцій. Ось як використовувати контекстний менеджер для читання файлів:
with open('students.json','r') as file: data = json.load(file) print(data) # Output {'students': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'}, {'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}
При читанні файлу вкажіть режим читання, позначений літерою “r” у коді вище.
Зауваження: Для зручності роботи, переконайтеся, що ваш JSON-файл знаходиться в тій самій папці, що й ваш скрипт Python (наприклад, main.py), як показано на зображенні нижче. Якщо JSON-файл знаходиться в іншій папці, потрібно вказати повний шлях до нього.
Зображення: Як читати JSON-файл у Python
У наступному розділі ви дізнаєтеся, як записувати у JSON-файли. ✍
Як записувати у JSON-файл у Python?
Для запису в існуючий JSON-файл або для створення нового використовуйте метод dump()
, як показано нижче:
json.dump(<dict_obj>,<json_file>) # where <dict_obj> is a Python dictionary # and <json_file> is the JSON file
Отже, синтаксис вище записує вміст словника <dict_obj>
у JSON-файл <json_file>
.
У попередніх розділах ми вже створили словник py_dict
. Тепер давайте запишемо його у новий JSON-файл. Назвемо його new_file.json.
У наступному фрагменті коду показано, як використовувати функцію dump()
:
with open('new_file.json','w') as file: json.dump(py_dict,file)
Зверніть увагу, що відкриття файлу в режимі запису (“w”) перезапише його вміст, якщо такий файл вже існує. Якщо ж файл не існує, то він буде створений.
Після виконання коду ви побачите, що в поточній робочій директорії створено новий JSON-файл. Ви можете перевірити його вміст.
При запису у файли основна мета – це збереження даних. Якщо вам важливо зберегти форматування, ви також можете використовувати параметри indent
та sort_keys
.
Висновок
⏱️ Підіб’ємо підсумки.
У цьому посібнику ви дізналися:
- основи JSON;
- як використовувати методи
loads()
таload()
для читання JSON-рядків та JSON-файлів відповідно; - як використовувати методи
dumps()
таdump()
для перетворення словників Python у JSON-рядки та JSON-файли відповідно.
Сподіваємося, цей посібник був для вас корисним. Вдалих вам навчань!
Також ви можете скористатися різними онлайн інструментами для аналізу, форматування та перевірки JSON.