EnotPRO Logo EnotPRO

Объект (json)

Тип переменной: Структурированные данные (JSON)

В отличие от простых типов (строка, число), переменная json позволяет хранить целые иерархические структуры данных: списки, вложенные объекты, смешанные типы. Это идеальный выбор для хранения сложных профилей, результатов API-запросов, истории действий или любых данных, которые не укладываются в одно простое значение.

Как это работает

После того как вы сохранили JSON-объект в переменную типа json (например, с именем user_profile) через реакцию SetVarCloud, в контексте выполнения бота появится следующая структура:

"var": {
  "person": {
    "user_profile": {
      "name": "Алексей",
      "age": 30,
      "is_premium": false,
      "address": {
        "city": "Москва",
        "street": "Тверская"
      },
      "orders": [101, 105, 110]
    }
  }
}

Обратите внимание: внутри JSON могут быть строки, числа, булевы значения, другие объекты и массивы.

Как получить доступ к значению

Чтобы обратиться к конкретному полю внутри JSON, используйте точечную нотацию:

${var.person.user_profile.name} → "Алексей" ${var.person.user_profile.age} → 30 ${var.person.user_profile.address.city} → "Москва" ${var.person.user_profile.orders.0} → 101

Важно: Если вы обратитесь ко всему объекту (${var.person.user_profile}), в сообщение попадёт строка-представление JSON, что обычно не нужно пользователю. Используйте этот путь в условиях или для передачи в другие системы (например, в HTTP-запрос).

Как изменить отдельное поле

Реакции SetVarCloud и AddVarCloud работают со всей переменной целиком. Чтобы изменить только одно поле внутри JSON, необходимо:

  1. Выгрузить всю переменную во временную локальную переменную.
  2. Изменить нужное поле в локальной копии.
  3. Сохранить изменённый объект обратно.

Пример (упрощённая логика):

Используйте GetVarCloud, чтобы загрузить user_profile в контекст. Она станет доступна как ${var.person.user_profile}.

Используйте SetVarLocal, чтобы сохранить этот объект в локальную переменную: ${localVar.profile} = ${var.person.user_profile}.

(Технически сложный шаг) Вам понадобится модифицировать локальную переменную. Для простых изменений проще перезаписать весь объект. Для сложной логики используйте макрос !{pick} и !{json} для сборки нового объекта.

Используйте SetVarCloud, чтобы сохранить изменённый ${localVar.profile} обратно в переменную user_profile.

Альтернатива: Если вам нужно часто менять независимые поля, храните их как отдельные переменные простых типов (string, number, bool), а JSON используйте для статичных или редко меняющихся данных.

© 2025 EnotPRO. Все права защищены.