При объединении второй объект заменяет совпадения

В первом объекте могут находиться общие настройки, во втором — изменения для конкретного запроса. Объединение поверхностное: совпавшее значение заменяется целиком, включая вложенный объект или массив. Для примера второй объект: {"профиль":{"город":"Казань"},"активен":true}. Поле «имя» из прежнего профиля исчезнет.

Проверьте предупреждение о заменённых ключах и итоговые вложенные значения. Инструмент не выполняет глубокое объединение и не склеивает массивы. Корнями обоих документов должны быть объекты; массив, null или строка вместо объекта вызывают отказ.

Поверхностная замена профиля
Исходные данные
{"профиль":{"имя":"Анна","город":"Москва"},"язык":"ru"}
Результат
{
  "профиль": {
    "город": "Казань"
  },
  "язык": "ru",
  "активен": true
}

Второй объект: {"профиль":{"город":"Казань"},"активен":true}. Старый профиль заменён целиком.

Сортируйте имена полей для удобной сверки

Выберите возрастание и рекурсивную обработку, чтобы одинаковые поля объектов стояли рядом при сравнении. При отключённой рекурсии меняется только корневой объект. Массивы сохраняют порядок элементов: список этапов не становится алфавитным списком.

Имена сортируются по кодовым единицам Unicode, а не по числовому значению или правилам русского словаря. Имя 10 может предшествовать имени 2. Это не канонизация для криптографической подписи и не способ сделать произвольный JSON совместимым с API.

Сортировка корня и вложенного объекта
Исходные данные
{"z":1,"a":{"z":2,"b":3}}
Результат
{
  "a": {
    "b": 3,
    "z": 2
  },
  "z": 1
}

Направление — по возрастанию, рекурсия включена; значения сохранены.

Экранируйте текст один раз

В направлении кодирования обычный текст становится одной JSON-строкой с внешними кавычками. Внутренние кавычки, обратная косая черта и переносы экранируются. Для обратной операции нужен именно строковый JSON, а не объект или число.

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

Текст для строкового JSON-поля
Исходные данные
Анна сказала: "Привет"
Вторая строка
Результат
"Анна сказала: \"Привет\"\nВторая строка"

Направление: текст в JSON-строку. Обратное направление вернёт кавычки и настоящий перенос.

Сохраните повторяющиеся параметры и строковые типы

Вставьте только query string, с начальным ? или без него: полный URL и фрагмент после # не принимаются. Знак + декодируется как пробел, повторяющиеся имена собираются в массив строк. Параметр page=2 остаётся строкой «2», а не числом.

Обратное направление принимает объект со строками или непустыми массивами строк; числа, null и вложенные объекты отклоняются. Ошибочная процентная или UTF-8-кодировка тоже вызывает отказ. Ввод ограничен 200 000 символов на поле; операции не отправляют запрос API и не заменяют проверку его документации.

Метки, пробел и номер страницы
Исходные данные
?tag=book&tag=new&q=Anna+Ivanova&page=2
Результат
{
  "tag": [
    "book",
    "new"
  ],
  "q": "Anna Ivanova",
  "page": "2"
}

Направление: параметры в JSON. tag сохранён массивом, page — строкой.

  1. Сверьте ожидаемые имена и типы полей с API.
  2. Проверьте заменённые значения после объединения.
  3. Используйте экранирование только для строкового поля.
  4. Проверьте повторы параметров и сохраните отдельный результат.

Вопросы и ответы

Сохранится ли старое поле вложенного профиля при merge?

Нет, совпавший вложенный объект заменяется вторым целиком. Проверьте результат; глубокое объединение здесь не выполняется.

Сортировка ключей подходит для подписи API-запроса?

Не автоматически. Получатель может требовать отдельный стандарт канонизации; этот инструмент только упорядочивает имена полей.

Почему после экранирования стало больше обратных слешей?

Специальные символы записываются по правилам JSON. Если кодировать уже готовую JSON-строку повторно, появится второй слой экранирования.

Что происходит с двумя параметрами tag в URL?

Оба значения сохраняются в массиве строк. Обратное преобразование снова создаёт повторяющиеся параметры с тем же именем.

Почему page=2 не стал числом в JSON?

Query string передаёт строки. Автоматическое преобразование могло бы испортить ID и типы, поэтому числа здесь не угадываются.

Можно ли вставить полный URL с адресом сайта?

Нет, передайте только часть параметров после вопросительного знака, без адреса и фрагмента #. Запросы к этому адресу не выполняются.