Разбор данных JSON

PythonBeginner
Практиковаться сейчас

Введение

JSON (JavaScript Object Notation) — это лёгкий формат обмена данными, который широко используется в файлах конфигурации и при взаимодействии с API.

Инструменты оболочки хорошо работают с обычным текстом, но структурированные форматы, такие как JSON, обычно проще и безопаснее обрабатывать в Python с помощью встроенных библиотек.

В этой лабораторной работе вы выступите в роли разработчика, которому нужно обновить конфигурацию приложения. Вы создадите файл конфигурации JSON, напишете скрипт Python для его загрузки, измените один параметр и сохраните изменения в новый файл.

Создание тестовых данных

На этом шаге вы создадите тестовый файл конфигурации JSON. Он имитирует обычный файл настроек программного приложения и содержит ключи с именем приложения, версией, режимом отладки и ограничением количества подключений.

Сначала убедитесь, что вы находитесь в правильном рабочем каталоге:

JSON — один из самых распространённых форматов структурированных данных в современной эксплуатации систем, поскольку его используют API, облачные инструменты и многие системы конфигурации. Умение безопасно читать и изменять JSON гораздо полезнее, чем работа с ним как с обычным текстом.

cd ~/project

Теперь создайте файл config.json с помощью текстового редактора, например nano.

nano config.json

Вставьте в файл следующее содержимое. Этот объект JSON содержит логическое значение (false), целое число (100) и строки.

{
  "appName": "SuperApp",
  "version": "1.0.0",
  "debug": false,
  "maxConnections": 100
}

Чтобы сохранить файл и выйти из nano:

Нажмите Ctrl + O, чтобы записать изменения, затем нажмите Enter для подтверждения имени файла. После этого нажмите Ctrl + X, чтобы выйти из редактора.

Проверить содержимое файла можно с помощью команды cat:

cat config.json

В терминале должно отобразиться содержимое JSON.

Чтение JSON

На этом шаге вы напишете скрипт Python, который прочитает файл config.json. Модуль json в Python преобразует данные JSON в словарь Python.

Здесь Python имеет явное преимущество перед простым написанием скриптов оболочки. Вместо поиска текста с помощью регулярных выражений и надежды на простую структуру Python разбирает файл по правилам JSON и предоставляет настоящие типы данных для работы в коде.

Представьте json.load() как «распаковку» посылки. Функция берёт текст из файла — «коробку» — и преобразует его в словарь Python — «содержимое», с которым можно легко работать и которое можно изменять в коде.

Создайте новый скрипт Python с именем parse_json.py:

nano parse_json.py

Добавьте в файл следующий код. Скрипт импортирует модуль json, открывает файл конфигурации и загружает данные.

import json

## Open the JSON file
with open('config.json', 'r') as file:
    ## Load the data into a Python dictionary
    data = json.load(file)

## Print the data to verify it was loaded correctly
print("Current Configuration:")
print(data)
print(f"Type of data: {type(data)}")

Сохраните файл и выйдите из nano (Ctrl+O, Enter, Ctrl+X).

Теперь запустите скрипт, чтобы увидеть результат:

python3 parse_json.py

В консоли должен появиться словарь. Это подтверждает, что Python успешно разобрал файл JSON.

Изменение данных

На этом шаге вы измените загруженные данные в скрипте Python. Поскольку json.load() преобразует данные в обычный словарь Python, значения можно изменять так же, как в любом другом словаре.

Обратите внимание на преобразование типов. Значения JSON true и false становятся в Python значениями True и False. Числа остаются числами, а не превращаются в обычные строки. Благодаря этому последующие сравнения и вычисления становятся намного безопаснее.

Снова откройте parse_json.py для редактирования:

nano parse_json.py

Измените значение ключа debug с False — этому значению соответствует false в JSON — на True. Добавьте логику изменения после загрузки данных, но до их вывода.

Измените код так, чтобы он выглядел следующим образом:

import json

with open('config.json', 'r') as file:
    data = json.load(file)

print("Original Debug Status:", data['debug'])

## Modify the value
data['debug'] = True

print("Updated Debug Status:", data['debug'])

Сохраните файл и выйдите из nano.

Снова запустите скрипт, чтобы проверить изменение в памяти:

python3 parse_json.py

В выводе должно быть показано исходное состояние False и обновлённое состояние True. Обратите внимание: пока это изменение существует только в памяти программы Python и ещё не сохранено в файл.

Сохранение изменений

На этом шаге вы сохраните изменённый словарь в новый файл JSON. Для этого используется функция json.dump().

Цикл «прочитать — изменить — записать» — распространённый шаблон автоматизации. Скрипт загружает структурированные данные, изменяет только нужные поля и записывает корректный JSON. Это гораздо надёжнее построчного редактирования, когда структура файла становится сложнее.

Представьте json.dump() как «упаковку» посылки. Функция берёт словарь Python — «предметы» — и снова преобразует его в текстовый формат — «запечатанную коробку», чтобы сохранить в файле. При тестировании рекомендуется записывать данные в новый файл, например new_config.json, чтобы не перезаписать исходную конфигурацию.

В последний раз откройте parse_json.py:

nano parse_json.py

Добавьте код, который записывает словарь data в файл new_config.json. Параметр indent=4 сделает содержимое файла удобным для чтения — JSON будет отформатирован с отступами.

Итоговый скрипт должен выглядеть следующим образом:

import json

## 1. Read the original file
with open('config.json', 'r') as file:
    data = json.load(file)

## 2. Modify the data
data['debug'] = True

## 3. Write to a new file
with open('new_config.json', 'w') as file:
    json.dump(data, file, indent=4)

print("Configuration updated and saved to new_config.json")

Сохраните файл и выйдите из nano.

Запустите скрипт, чтобы выполнить операцию чтения, изменения и записи:

python3 parse_json.py

При успешном выполнении скрипт выведет сообщение с подтверждением.

Проверка результата

На этом шаге вы убедитесь, что новый файл конфигурации создан и содержит обновлённое значение.

Проверка особенно важна для структурированных файлов: скрипт может завершиться без синтаксических ошибок, но при этом записать логически неверные данные. Повторное чтение результата позволяет подтвердить и создание файла, и корректность изменения данных.

Выведите список файлов в текущем каталоге, чтобы убедиться, что new_config.json существует:

ls -l

Теперь выведите содержимое нового файла:

cat new_config.json

Вы должны увидеть результат, похожий на этот:

{
  "appName": "SuperApp",
  "version": "1.0.0",
  "debug": true,
  "maxConnections": 100
}

Обратите внимание: теперь значение "debug" равно true.

Также можно сравнить исходный и новый файлы с помощью команды diff, чтобы точно увидеть изменения:

diff config.json new_config.json

В выводе будет показано различие между строками с параметром debug.

Итоги

В этой лабораторной работе вы научились работать с данными JSON с помощью Python. Сначала вы создали файл конфигурации в формате JSON, затем написали скрипт Python, который разобрал этот файл и преобразовал его в словарь. После этого вы программно изменили данные и сохранили обновлённую структуру в новый файл JSON.

Рабочий процесс «прочитать, изменить, записать» — фундаментальный шаблон автоматизации и написания скриптов для DevOps. Bash отлично подходит для выполнения команд, а способность Python работать со структурированными данными, такими как JSON, делает его мощным инструментом для управления сложными конфигурациями и данными API.