Я думаю, что в своем вопросе вы сравниваете "яблоки" с "апельсинами". В случае Java у вас есть класс, который вы определяете, в который вы можете добавлять аннотации. Эти аннотации могут затем использоваться библиотекой, такой как gson, для настройки сериализации экземпляров этого класса.
В случае с ruby вы говорите о экземплярах встроенного класса (Hash), который вы не можете свободно комментировать (если только вы не хотите использовать Hash).
Если вы создадите пользовательский класс для представления ваших экземпляров Hash, вы откроете больше опций, таких как переопределение метода .to_json для ваших классов или даже реализация собственной схемы деларива, такой как предоставление хэша сопоставления в вашем классе.
Если вы хотите сохранить ваши данные в качестве экземпляров хэша, то, я думаю, вам следует придерживаться различных преобразований, которые вы обнаружили и предложили в комментариях.