Конвертер JSON в Ruby Hash Online
Конвертируйте JSON в Ruby Hash, Struct или OpenStruct. Бесплатно, в браузере, без загрузки файлов.
{
name: "John",
age: 30,
active: true,
tags: [
"ruby",
"rails"
],
address: {
city: "Tokyo",
zip: "100-0001"
}
}Что вы можете сделать
JSON в Ruby: идиоматичный Hash, Struct и OpenStruct
Несколько форматов
Hash с символами, Hash со строками, Struct.new или OpenStruct в зависимости от шаблона использования в Ruby или Rails.
100% конфиденциально
Конвертация выполняется в браузере на JavaScript. Ваш код не покидает устройство.
Идиоматичный Ruby
Генерируемый код следует соглашениям Ruby 3.x и руководству стиля RuboCop.
Мгновенно
Конвертация в реальном времени по мере ввода. Без кнопок и ожидания.
Как это работает
Три шага — никаких сложностей
Вставьте JSON
Введите любой валидный JSON-объект: простой, вложенный, с массивами или сложными полями. Валидация выполняется в реальном времени в браузере.
Выберите тип вывода
Выберите Hash с ключами-символами, Hash с ключами-строками, Struct.new или OpenStruct в зависимости от шаблона использования в вашем Ruby или Rails-коде.
Скопируйте Ruby-код
Получите идиоматичный Ruby-код, готовый для вставки в ваш проект, с правильным синтаксисом для используемой версии Ruby (2.7+ или 3.x).
FAQ
Остались вопросы?
Зависит от контекста использования в вашем Ruby-коде. Ключи-символы (:name, :age) — доминирующий шаблон в идиоматичном Ruby: символы неизменяемы и уникальны в памяти (Ruby поддерживает глобальную таблицу символов), что делает их более эффективными для ключей Hash. Синтаксис Ruby (с версии 1.9) с { name: value } чище, чем { :name => value }. Rails использует символы во всём внутреннем API (params[:user_id], session[:user]). Ключи-строки ('name', 'age') полезны, когда данные приходят из внешнего JSON без конвертации, когда ключи содержат символы, недопустимые для символов Ruby (дефисы, пробелы, точки), или при использовании ActiveSupport::HashWithIndifferentAccess.
Hash — наиболее гибкая структура данных, выбор по умолчанию для JSON в Ruby. Hash не имеет фиксированной схемы: можно динамически добавлять и удалять ключи. Идеален для данных конфигурации, ответов API с переменной структурой. Struct.new(:field1, :field2) создаёт класс с фиксированными атрибутами и доступом через методы (object.field1). Structs быстрее OpenStruct, потребляют меньше памяти, сравнимы по значению и подходят, когда структура данных известна на этапе проектирования. OpenStruct принимает динамические атрибуты как Hash, но с доступом через методы. Удобен для быстрого прототипирования, но имеет значительные потери производительности: в бенчмарках OpenStruct в 10–50 раз медленнее Hash для доступа к атрибутам в Ruby 2.x, хотя Ruby 3.x значительно улучшил его реализацию.
Ruby включает библиотеку json в стандартную библиотеку начиная с Ruby 1.9 (2007). Дополнительная установка гемов не требуется. Базовое использование: require 'json'; data = JSON.parse(json_string). По умолчанию JSON.parse возвращает Hash с ключами-строками. Для ключей-символов: JSON.parse(json_string, symbolize_names: true). Опция symbolize_names рекурсивно конвертирует все строковые ключи в символы, включая ключи во вложенных объектах. Для генерации JSON из Ruby: JSON.generate(object) или object.to_json.
Да, и они важны для производственного кода. OpenStruct имеет три основных недостатка производительности: (1) создание — дороже, чем создание Hash, так как для каждого атрибута определяются методы доступа через define_method; (2) доступ — доступ к атрибуту OpenStruct медленнее доступа к Hash из-за диспетчеризации методов; (3) память — каждый экземпляр OpenStruct имеет дополнительные издержки. Ruby 3.0 значительно улучшил OpenStruct (реализация переписана на C вместо чистого Ruby), но OpenStruct всё равно медленнее Hash и Struct для интенсивного доступа. Официальная рекомендация Ruby 3.x: предпочитайте Struct над OpenStruct, когда схема известна.
ActiveSupport::HashWithIndifferentAccess (HWIA) — подкласс Hash, включённый в Rails, который позволяет обращаться к ключам как по строке, так и по символу. Это тип, который Rails использует для params. Для загрузки внешнего JSON с безразличным доступом: json_data = JSON.parse(response_body).with_indifferent_access. Метод with_indifferent_access доступен на Hash через ActiveSupport. В Rails 7.x ActionController::Parameters реализует семантику, схожую с HWIA, но с дополнительными ограничениями безопасности (require и permit для Strong Parameters).
Ruby 2.3 ввёл прагму # frozen_string_literal: true, которая замораживает все строковые литералы в файле, делая их неизменяемыми и разделяемыми в памяти. В дорожной карте Ruby 4.0 обсуждается включение этого по умолчанию. Влияние на код с ключами-строками для Hash: при активном frozen_string_literal строковые ключи автоматически замораживаются, что эффективно с точки зрения памяти. Однако попытка изменить строковый ключ (конкатенация, gsub!) в файле с frozen_string_literal вызовет FrozenError. Рекомендация для современных проектов на Ruby 3.x — включать # frozen_string_literal: true во все файлы и использовать ключи-символы в Hash для максимальной эффективности.
Конвертация JSON в Ruby Hash, Struct и OpenStruct: техническое руководство
Конвертация JSON в Ruby-структуры данных — фундаментальная операция в бэкенд-разработке с Ruby и Ruby on Rails. JSON использует модель данных, напрямую отображаемую в нативные типы Ruby: объекты JSON — в Hash, массивы — в Array, строки — в String, числа — в Integer или Float, булевы значения — в true/false, null — в nil. Синтаксис Hash в Ruby существенно эволюционировал. Ruby 1.9 (2007) ввёл синтаксис двоеточия для ключей-символов: { key: value }, эквивалентный { :key => value }. Ruby 3.1 (2021) расширил синтаксис для разрешения строковых ключей и сокращённой записи переменных. RuboCop рекомендует синтаксис двоеточия ({ key: value }) при всех символьных ключах и hashrocket ({ 'key' => value }) при строковых или смешанных.
Struct в Ruby — класс-генератор классов: Struct.new(:name, :age) создаёт новый анонимный класс (или именованный, если присвоить константе) с определёнными атрибутами, методами доступа, сравнением по значению и методами преобразования to_a и to_h. Начиная с Ruby 3.2, Struct.new с keyword_init: true позволяет инициализацию через kwargs: Person.new(name: 'Ana', age: 30). Structs широко используются для Value Objects и Data Transfer Objects (DTO) в приложениях с чистой архитектурой. OpenStruct (стандартная библиотека ostruct) принимает динамические атрибуты, определённые в конструкторе: person = OpenStruct.new(name: 'Ana'); person.email = 'ana@example.com'. Особенно популярен для написания тестовых дублёров и фикстур в RSpec и Minitest: OpenStruct.new(id: 1, name: 'Test') — быстрый способ создать фиктивный объект без реализации полных классов.
В контексте Ruby on Rails интеграция JSON повсеместна. Ответы внешних API (REST или GraphQL) разбираются с JSON.parse, параметры из POST-запросов с Content-Type application/json автоматически парсятся ActionDispatch. Для сериализации моделей ActiveRecord в JSON Rails включает метод as_json с параметрами only:, except:, include: для ассоциаций. Гем jbuilder (включён в Rails по умолчанию) позволяет строить JSON-ответы на Ruby DSL. Для конвертации JSON в Ruby-объекты с валидацией типов в современных проектах используются: dry-struct (семейство dry-rb) — определяет типы с автоматическим приведением и валидацией схемы; Sorbet с T::Struct для статической типизации во время выполнения; ActiveModel::Attributes в Rails для типизированных атрибутов в моделях, не основанных на ActiveRecord. Инструмент генерирует базовый код, который может служить отправной точкой для любого из этих шаблонов или использоваться напрямую там, где важна простота.