Escapowanie znaków specjalnych z wartości makr LLD w JSONPath

Gdy makra wykrywania niskiego poziomu są używane w przetwarzaniu JSONPath i ich wartości są rozwijane, stosowane są następujące zasady escapowania znaków specjalnych:

  • tylko znak ukośnika odwrotnego (\) i cudzysłowu (") są brane pod uwagę przy escapowaniu;
  • jeśli rozwinięta wartość makra zawiera te znaki, każdy z nich jest poprzedzany ukośnikiem odwrotnym;
  • jeśli są już poprzedzone ukośnikiem odwrotnym, nie jest to traktowane jako escapowanie i zarówno ukośnik odwrotny, jak i następujące po nim znaki specjalne są escapowane ponownie.

Na przykład:

JSONPath LLD macro value After substitution
$.[?(@.value == "{#MACRO}")] special "value" $.[?(@.value == "special \"value\"")]
c:\temp $.[?(@.value == "c:\\temp")]
a\\b $.[?(@.value == "a\\\\b")]

Gdy makro jest używane w wyrażeniu, makro, które może zawierać znaki specjalne, powinno być ujęte w cudzysłów:

JSONPath LLD macro value After substitution Result
$.[?(@.value == "{#MACRO}")] special "value" $.[?(@.value == "special \"value\"")] OK
$.[?(@.value == {#MACRO})] $.[?(@.value == special \"value\")] Bad JSONPath expression

Gdy makro jest używane w ścieżce, makro, które może zawierać znaki specjalne, powinno być ujęte w nawiasy kwadratowe i cudzysłów:

JSONPath LLD macro value After substitution Result
$.["{#MACRO}"].value c:\temp $.["c:\\temp"].value OK
$.{#MACRO}.value $.c:\\temp.value Bad JSONPath expression