JSON — популярний формат обміну даними. Python поставляється з вбудованим модулем JSON для аналізу та роботи з даними JSON. І цей підручник навчить вас усьому про роботу з JSON у Python.
До кінця цього підручника ви навчитеся:
- основи JSON,
- як аналізувати та створювати рядки JSON у Python, а також
- як читати та писати файли JSON у Python.
Починаємо!⏳
Що таке JSON?
JSON розшифровується як JavaScript Object Notation, і це текстовий формат для обміну даними. Хоча JSON спочатку створювався на основі об’єктів JavaScript, майже всі мови програмування підтримують роботу з JSON.
Якщо ви коли-небудь працювали з 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>)
тут,
— це словник Python, до якого ви хочете завантажити рядок JSON, — будь-який дійсний рядок JSON.
Це завантажує
Давайте закодуємо приклад. Тут 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" } ] } '''
А наведений нижче фрагмент коду показує, як можна завантажити рядок JSON json_str у словник Python за допомогою методу loads(). Ви можете використовувати вбудовану функцію type(), щоб перевірити, що py_dict є словником Python.
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>)
тут,
– це словник Python, з якого ви хочете створити рядок JSON, — результуючий рядок JSON.
Отже, метод dumps() створює дамп
До нашого існуючого словника Python py_dict. давайте додамо новий ключ «фільми». Ви можете зробити це, як показано в наступному фрагменті коду:
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, щоб додати відступ.
І ви можете зробити це, встановивши для відступу ціле число, наприклад 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" } ]
Тепер ключі з’являються в алфавітному порядку: «автор», «назва» та «рік».
Наразі ви навчилися працювати з рядками JSON у Python. У наступному розділі ви дізнаєтеся, як працювати з файлами JSON.
Як читати файл JSON на Python
Щоб прочитати файл JSON у Python, використовуйте такий синтаксис:
json.load(<json-file>) # where <json-file> is any valid JSON file.
Зверніть увагу, як ми використовуємо метод load(), а не load(). 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 знаходиться в тій же папці, що й main.py, як показано на зображенні нижче. Якщо ваш файл JSON знаходиться в іншій папці, обов’язково вкажіть шлях до файлу.
Прочитайте файл JSON у Python.
У наступному розділі ви дізнаєтеся, як писати у файл JSON.✍
Як писати у файл JSON на Python
Щоб записати в існуючий файл JSON або створити новий файл JSON, використовуйте метод dump(), як показано:
json.dump(<dict_obj>,<json_file>) # where <dict_obj> is a Python dictionary # and <json_file> is the JSON file
Отже, наведений вище синтаксис створює дамп словника
У попередньому розділі ми мали словник py_dict. Тепер давайте завантажимо це в новий файл JSON. І давайте назвемо його new_file.json.
У наступній клітинці коду показано, як можна використовувати функцію dump():
with open('new_file.json','w') as file: json.dump(py_dict,file)
Примітка. Відкриття файлу в режимі запису (w) перезаписує вміст, якщо файл існує. Якщо файл не існує, він буде створений.
Після виконання наведеної вище комірки коду ви побачите, що в поточному робочому каталозі створено новий файл JSON. І ви можете продовжити перевірку вмісту файлу JSON.
Створіть файл JSON на Python
Під час запису у файли основною метою є зберігання даних. А якщо ви хочете зберегти форматування, ви також можете використовувати параметри indent і sort_keys.
Висновок
⏲ Настав час коротко підвести підсумки.
У цьому підручнику ви дізналися:
- основи використання JSON,
- як використовувати методи loads() і load() для читання рядка JSON і файлів JSON відповідно,
- як використовувати методи dumps() і dump() для створення скиду словників Python у рядки JSON і файли JSON відповідно.
Сподіваюся, цей посібник був для вас корисним. Щасливого навчання!
Ви також можете переглянути інструменти JSON для аналізу, форматування та перевірки.