Вложенные объекты удобны для описания структуры данных, но плохо ложатся в таблицу или файл локализации. Flatten превращает {"меню": {"файл": {"открыть": "Открыть"}}} в один плоский ключ меню.файл.открыть → "Открыть" — именно так устроены файлы переводов во многих CMS и фреймворках локализации рунета.
Как это работает
Каждое вложенное поле превращается в одну строку, где ключ — это полный путь через точку или индекс в квадратных скобках, а значение — само значение. Например, {"user": {"город": "Москва"}} станет парой user.город → "Москва". Элементы массива получают индекс в пути: items[0].название.
Зачем это нужно переводчикам и локализаторам
Плоские ключи вида settings.profile.title — стандарт для файлов переводов в i18next, vue-i18n и подобных библиотеках, которые массово используются в русскоязычных проектах. Переводчику в CAT-инструменте (или просто в Excel) гораздо проще работать со списком «ключ → строка», чем разбираться во вложенной структуре JSON вручную.
Зачем это нужно вообще
- Импортировать вложенные данные в таблицу базы данных или Excel без вложенности.
- Упростить построчное сравнение двух сложных объектов.
- Быстро найти конкретное значение в глубоко вложенном JSON, увидев весь путь сразу.
Обратная операция: unflatten
Восстановить вложенную структуру из плоского списка можно, разобрав каждый ключ на сегменты пути (по точкам и индексам в скобках) и последовательно создав вложенные объекты и массивы. Сложность возникает, если путь неоднозначен — например, если в данных одновременно есть буквальный ключ "a.b" и вложенный путь a.b: unflatten не сможет однозначно определить, что имелось в виду, и сообщит о конфликте.