Объект (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, необходимо:
- Выгрузить всю переменную во временную локальную переменную.
- Изменить нужное поле в локальной копии.
- Сохранить изменённый объект обратно.
Пример (упрощённая логика):
Используйте 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 используйте для статичных или редко меняющихся данных.