Это перевод страницы документации с английского языка. Помогите нам сделать его лучше.

Экранирование спецсимволов из значений LLD макросов в JSONPath

Начиная с Zabbix 4.4.4, когда макросы низкоуровневого обнаружения используются в JSONPath предобработке и из значения раскрываются, тогда применяются следующие правила экранирования спецсимволов:

  • для экранирования учитываются только символы обратной косой черта (\) и двойной кавычки (");
  • если раскрытое значение макроса содержит эти символы, каждый из них экранируется при помощи обратной косой черты;
  • если эти символы уже экранированы при помощи обратной косой черты, такая запись не считается экранированием и как косая черта, так и последующие спецсимволы будут экранированы еще раз.

Например:

JSONPath Значение LLD макроса После подстановки
$.[?(@.value == "{#MACRO}")] special "value" $.[?(@.value == "special \"value\"")]
c:\temp $.[?(@.value == "c:\\temp")]
a\\b $.[?(@.value == "a\\\\b")]

При использовании в выражении макроса, который может иметь спецсимволы, их необходимо заключить в двойные кавычки:

JSONPath Значение LLD макроса После подстановки Результат
$.[?(@.value == "{#MACRO}")] special "value" $.[?(@.value == "special \"value\"")] OK
$.[?(@.value == {#MACRO})] $.[?(@.value == special \"value\")] Плохое JSONPath выражение

При использовании в пути макроса, который может иметь спецсимволы, их необходимо заключить в квадратные скобки и двойные кавычки:

JSONPath Значение LLD макроса После подстановки Результат
$.["{#MACRO}"].value c:\temp $.["c:\\temp"].value OK
$.{#MACRO}.value $.c:\\temp.value Плохое JSONPath выражение