Чтение и запись JSON
JSON.parse и generate
«Чтение и запись JSON» — бесплатный урок Ruby Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.
Что такое JSON?
JSON (JSON — это не язык разметки) — лёгкий текстовый формат для обмена данными. Его структура хорошо соответствует хешам и массивам Ruby.
Подключите библиотеку json, чтобы использовать этот формат.
require 'json'
data = { name: 'Ruby', year: 1995 }
puts(JSON.generate(data))Разбор текста JSON
JSON.parse преобразует строку JSON в объекты Ruby: объекты становятся хешами, а массивы — массивами.
require 'json'
text = '{"name":"Ruby","year":1995}'
h = JSON.parse(text)
puts(h['name'])
puts(h['year'])Создание текста JSON
JSON.generate (или to_json для объектов) преобразует данные Ruby в компактную строку JSON.
require 'json'
arr = [1, 2, { ok: true }]
puts(arr.to_json)Красивое форматирование
JSON.pretty_generate создаёт удобочитаемый JSON с отступами, идеально подходящий для конфигурационных файлов и отладки.
require 'json'
data = { name: 'Ruby', tags: ['fun', 'oop'] }
puts(JSON.pretty_generate(data))Ключи-символы при разборе
По умолчанию ключи после разбора имеют тип String. Передайте symbolize_names: true, чтобы вместо этого получить ключи типа Symbol.
require 'json'
h = JSON.parse('{"name":"Ruby"}', symbolize_names: true)
puts(h[:name])Вложенные структуры
JSON поддерживает вложенность. Разбор восстанавливает полное дерево хешей и массивов.
require 'json'
text = '{"user":{"name":"Ada","roles":["admin","dev"]}}'
h = JSON.parse(text)
puts(h['user']['name'])
puts(h['user']['roles'][1])Соответствие типов
Типы JSON соответствуют типам Ruby:
- объект → Hash, массив → Array
- строка → String, число → Integer/Float
- логическое значение true/false → true/false, null → nil
require 'json'
h = JSON.parse('{"a":1,"b":1.5,"c":null,"d":true}')
puts(h['a'].class)
puts(h['c'].inspect)Запись JSON в файл
Объедините pretty_generate с File.write, чтобы сохранить данные на диске.
require 'json'
require 'tmpdir'
path = File.join(Dir.tmpdir, 'data.json')
File.write(path, JSON.pretty_generate({ ok: true }))
puts(File.read(path))Чтение JSON из файла
Прочитайте содержимое файла и разберите его за один шаг.
require 'json'
require 'tmpdir'
path = File.join(Dir.tmpdir, 'cfg.json')
File.write(path, '{"port":8081}')
cfg = JSON.parse(File.read(path))
puts(cfg['port'])Обработка ошибок разбора
Некорректный JSON вызывает JSON::ParserError. Перехватите эту ошибку, чтобы корректно обработать неверные входные данные.
require 'json'
begin
JSON.parse('{not valid}')
rescue JSON::ParserError => e
puts 'Invalid JSON caught'
endОбратное преобразование
После создания и последующего разбора должны получиться эквивалентные данные — это полезная базовая проверка.
require 'json'
original = { id: 7, tags: ['a', 'b'] }
back = JSON.parse(original.to_json, symbolize_names: true)
puts(back == original)Быстрая проверка
Какой вариант заставляет JSON.parse возвращать ключи типа Symbol вместо ключей типа String?
Повторение: чтение и запись JSON
Вы умеете перемещать данные в JSON и обратно:
JSON.parseпреобразует строку в объекты Rubyto_json/JSON.generateсоздают компактный JSONpretty_generateсоздаёт удобочитаемый выводsymbolize_names: trueсоздаёт ключи типа Symbol- Перехватывайте
JSON::ParserErrorпри неверных входных данных
require 'json'
puts(JSON.parse('[1,2,3]').sum)Часто задаваемые вопросы
Урок «Чтение и запись JSON» бесплатный?
Да — полный текст урока «Чтение и запись JSON» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.
Чему я научусь в уроке «Чтение и запись JSON»?
JSON.parse и generate Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Ruby Academy?
Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Чтение и запись JSON»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Ruby Academy?
Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Чтение и запись JSON
- Работа с CSV
- Конфигурация YAML
- Выбор формата