Як розібрати JSON у Python

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.

Це завантажує у словник Python .

Давайте закодуємо приклад. Тут 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() створює дамп у рядок JSON .

До нашого існуючого словника 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 

Отже, наведений вище синтаксис створює дамп словника у файл JSON .

У попередньому розділі ми мали словник 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 для аналізу, форматування та перевірки.

  25 зображень для дисплея HD