В жизни каждого системного аналитика наступает момент, когда он открывает две вкладки: слева – Swagger с контрактом системы А, справа – Confluence с контрактом системы Б. Между ними – пустая Excel-таблица, либо ещё одна вкладка Confluence. Задача – простая, как мир: смаппить поля.

И начинается знакомый ритуал: скопировать атрибут из одного места, вставить в другое. Ctrl+C → Ctrl+V, снова и снова. Одно неверное движение или опечатка — и через пару дней от разработчика прилетит таск с комментарием «маппинг не работает, проверь пути».

Меня зовут Владислав, и этот ритуал был частью моей ежедневной работы системным аналитиком в телеком-компании. Мой проект — это оркестратор сложных бизнес-процессов по работе с документами, который постоянно интегрируется по REST API с финансовыми системами, службами безопасности и другими сервисами. А где REST, там, как правило, и JSON.

Сразу оговорюсь, что я не профессиональный разработчик. Скорее, занимаюсь тем, что можно назвать "vibe-коддингом" — пишу код, чтобы решить конкретную прикладную задачу, не претендуя на идеальную архитектуру. И однажды, после очередного марафона по маппингу, я решил, что пора автоматизировать эту боль.

Так родилась идея десктопного приложения. Я выбрал Python и PyQt5, потому что это позволяло быстро накидать графический интерфейс. После нескольких недель вечерами и на выходных получился инструмент, который покрыл все мои потребности.

О программе

1. Визуальное представление «бок о бок»

Главный экран программы — это то, чего мне так не хватало. Слева — структура-источник, справа — структура-приёмник. Никаких плоских таблиц! Оба JSON-файла отображаются в виде иерархических деревьев, где сразу видна вложенность объектов и массивов. Для наглядности у каждого типа данных своя иконка. Это моментально решает проблему потерянной вложенности из Excel.

Главный экран
Главный экран

2. Маппинг с помощью Drag-and-Drop

Это главная фича, убивающая рутину. Вместо копирования путей, я просто зажимаю поле в одном дереве и перетаскиваю его на нужное поле в другом. Готово! Программа сама создает связь, и в центральной таблице появляется новая строка маппинга. Быстро и без единой опечатки.

3. Таблица маппинга

Все созданные связи отображаются в таблице в центре экрана. Здесь наглядно видно:

  • Полные пути в источнике и приёмнике.

  • Типы данных. Программа автоматически подсвечивает красным несовпадающие типы (например, string в integer), помогая ловить ошибки на самой ранней стадии.

  • Если кликнуть на строку, программа подсветит связанные поля в обоих деревьях и прокрутит к ним. Это невероятно удобно при работе с большими JSON-структурами.

Таблица маппинга
Таблица маппинга

4. Управление метаданными: всё в одном месте

Маппинг — это не только про «путь-в-путь». Поэтому для каждого поля можно задать метаданные:

  • Тип данных: Можно уточнить, что строка — это date или enum.

  • Обязательность (Required): Удобный чек-бокс для обязательных полей.

  • Описание: Место для человекочитаемых комментариев.

  • Пример/Enum значения: Для перечислений можно задать список возможных значений.

Причем система сохраняет консистентность: если изменить тип поля здесь, он тут же обновится и в главном окне маппинга, и наоборот. Вся информация теперь живёт в одном месте.

5. Не просто маппер, а мини-редактор JSON

Иногда нужно спроектировать новую структуру, а не работать с готовой. Правый клик по узлу в дереве позволяет:

  • Добавить дочерний элемент.

  • Переименовать ключ.

  • Изменить значение или тип.

  • Удалить узел со всей его вложенностью.

Это превращает программу в удобный инструмент для проектирования JSON-контрактов.

6. Сохранение и экспорт: гибкость для командной работы

Весь проект — обе JSON-структуры, все маппинги и все метаданные — можно сохранить в один файл-проект .json. Это позволяет передать всю работу коллеге или вернуться к ней позже.

  • Объект mappins – это сам маппинг

  • Объекты source_json_structure_preview  и target_json_structure_preview – можно использовать как примеры json’a

  • Объекты source_field_metadata и target_field_metadata – описывают метаданные атрибутов (тип, валидация, описание и т.д.)

Структура JSON при экспорте маппинга
Структура JSON при экспорте маппинга

А для тех, кто не может жить без Excel, я добавил функцию экспорта и импорта в .xlsx. Программа создает файл с тремя листами: Mappings, Source Metadata и Target Metadata. Это идеальный мост между моим удобным инструментом и корпоративными стандартами документации.

Заключение

Инструмент, который родился из моей личной боли, оказался решением широкой проблемы. Он экономит часы работы, снижает количество глупых ошибок и превращает рутинную задачу в почти творческий процесс. Я уверен, он может быть полезен не только мне.

Готов поделиться с коллегами-аналитиками. Для вопросов и предложений можно написать мне в Telegram: @vlad_pere

Спасибо за внимание, и пусть ваши маппинги всегда будут безошибочными!

Комментарии (10)


  1. Vilmarin
    23.06.2025 11:13

    Вроде изян


  1. DMS_13
    23.06.2025 11:13

    Не совсем понятно, какой артефакт документации готовит этот инструмент.

    В моей практике, такие маппинги чаще всего делаются на BFF слое. Где тупо надо дернуть несколько эндпоинтов подряд и из полученных данных собрать ответ. Для таких эндпоинтов создается описание метода, в котором и содержится последовательность вызовов, правила обработки ответов и сам маппинг.

    Т.е. маппинг это только часть документации.

    Как вы применяете ваш маппер в процессе разработки? Что вы в результате передаёте разработчикам и тестировщикам и что они с этим делают?


    1. vladpere Автор
      23.06.2025 11:13

      Спасибо за вопросы!
      Если кратко: "Да, маппинг - это часть документации"

      Где использую:
      1. Для интеграции с другими системами. Когда пытаюсь соединить модель данных своего сервиса и другой системы. В данном случае мне предоставляют описание метода другой системы, к которому мне нужно подготовить данные.
      2. Прокси методы. Когда по любым причинам создается прослойка для существующего метода и нового.
      Например, когда для легаси систему делают REST API

      Какие артефакты получаются:
      1. Вывод excel с маппингом в табличной форме. Можно копировать в confluence, где описание маппинга
      2. JSON, который генерит программа. Из него можно вытащить примеры json'ов для тестировщиков

      Что делают с артефактом:
      1. Разработчики на основе маппинга пишут код (могут сделать заготовку класса DTO)
      2. Для тестировщиков часть документации для сравнения ожидаемого и реального


      1. DMS_13
        23.06.2025 11:13

        Тогда давайте продолжим, чтобы понять ценность...

        Вот у меня есть :

        • маппинг в программе

        • excel файл

        • json файл

        Пришла новая задача, по которой мапинг надо изменить: добавить одно поле.

        Вы это должны сделать сначала в программе, потом обновить excel в конфе, и json.

        Как выглядит этот процесс, если работает другой аналитик? Он должен ваш маппинг сначала подгрузить себе?


        1. DMS_13
          23.06.2025 11:13

          Я это к тому, что каждый артефакт документации имеет свой жизненный цикл. И если есть программа, генерирующая артефакт, то должна быть в программе поддержка этого жизненного цикла.

          Если вы эти артефакты куда-то выкладываете, то как вы их потом обновляете? Как их обновляют другие аналитики?
          И как эти артефакты упрощают дальнейшую разработку и тестирование?
          Просто, если вы создали инструмент, который генерит всю ту-же табличку в конфе с маппингом, то чере 5-6 итераций правок станет понятно, что проще её обновлять в самой конфе, без дополнительных инструментов. Потому что будет вечный процесс: подгрузи актуальную версию, поправь её, выгрузи обратно. И если это правка в одном поле, то никто замарачиваться не будет...
          С json, по большому счёту, тоже самое...

          Соответственно и вопросы эти сводятся к одному: Вы как долго в своей практике эту программу используете? Кто-то кроме вас в компании её использует? Как вы работаете совместно?
          Вот эти детали интересны.


      1. DMS_13
        23.06.2025 11:13

        Про Артефакты тоже не понятно. Для разработчиков нужен swagger или openApi. А какой именно артефакт вы им передаеёте? json с мапингом?
        Как разработчики и тестировщики этими артефактами пользуются?
        Ну то есть, разработчик и на основе таблички может пишсать код... Как его жизнь от этого инструмента облегчается?


  1. DMS_13
    23.06.2025 11:13

    Также, встречал в своей практике low-code платформы, в котором аналогичным способом сразу генериться конечный код. Т.е. этот редактор, впринципе, можно развить до аналогичной low-code платформы. Чтобы на выходе были не файлики с маппингом, а готовый код метода.


    1. vladpere Автор
      23.06.2025 11:13

      Можно, если привязывать к конкретному ЯП. Как вариант на подумать)
      Спасибо!