JSON Mapper: клиентский инструмент для трансформации данных без боли

#javascript#json#data-transformation

Когда в последний раз вам приходилось превращать API-ответ в нужный формат для фронта? Если вы, как и я, устали писать вручную правила для каждого поля, возможно, стоит попробовать другой подход — маппинг по примеру. Именно такой инструмент сделал Joe Andersen на чистом JS.

Проблема: ручной маппинг — это error-prone

Типичный сценарий: бекенд присылает users[].posts[].title, а фронту нужно data.articles[*].headline. Классическое решение — написать трансформер вручную:

const transform = (input) => ({
  data: {
    articles: input.users.map(user => 
      user.posts.map(post => ({
        headline: post.title
      }))
    ).flat()
  }
});

Проблемы такого подхода:

Как работает маппинг по примеру

Идея проста: вы даёте инструменту два JSON — исходный и целевой (пример того, что хотите получить). Алгоритм сам выводит правила преобразования. В случае с JSON Mapper это происходит прямо в браузере, без серверной части.

Пример из реального кейса:

// Source
{
  "users": [
    {
      "posts": [{"title": "Hello World"}]
    }
  ]
}

// Target example
{
  "data": {
    "articles": [{"headline": "Hello World"}]
  }
}

Инструмент понимает, что users[0].posts[0].title соответствует data.articles[0].headline и генерирует правило для маппинга массивов через wildcards.

Под капотом: рекурсия и pattern matching

Автор реализовал несколько ключевых механизмов:

  1. Рекурсивный обход структур — алгоритм сравнивает объекты и массивы на всех уровнях вложенности
  2. Wildcard-логика — символы [] и [*] обрабатываются как универсальные селекторы для массивов
  3. Кеширование путей — чтобы не вычислять одни и те же преобразования многократно

Важный момент — решение работает именно с примерами данных, а не с описанием схем. Это ближе к тому, как думает разработчик: “я знаю, какой input и какой output мне нужен”.

Когда это полезно (а когда нет)

Хорошие сценарии:

Ограничения:

Альтернативы и когда их выбирать

В production-среде я бы рассмотрел:

Но для быстрых экспериментов и ad-hoc задач клиентское решение — это именно тот low-overhead вариант, который можно держать в закладках.

Финал: стоит ли пробовать?

Мой вердикт: инструмент занял место в моём workflow для:

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


Источник: https://dev.to/joe_andersen_04505c590cb4/json-mapper-tool-2n9h