Escapando caracteres especiais de valores de macro LLD em JSONPath
Quando macros de descoberta de baixo-nível (LLD) são usadas em pré-processamento JSONPath e seus valores são resolvidos, as seguintes regras de escape de caracteres especiais são aplicadas:
- apenas caracteres de contrabarra (\) e aspa duplas (") são considerados para escape;
- se o valor resolvido da macro contém estes caracteres, cada um deles é escapado com uma contrabarra;
- se eles já estão escapados com uma contrabarra, isto não é considerado como escape e ambos a contrabarra e os caracteres especiais são escapados mais uma vez.
Por exemplo:
| JSONPath | valor da macro LLD | Após substituição |
|---|---|---|
| $.[?(@.value == "{#MACRO}")] | special "value" | $.[?(@.value == "special \"value\"")] |
| c:\temp | $.[?(@.value == "c:\\temp")] | |
| a\\b | $.[?(@.value == "a\\\\b")] |
Quando usada na expressão a macro que pode conter caracteres especiais deve ser quotada com aspas duplas:
| JSONPath | valor da macro LLD | Após substituição | Resultado |
|---|---|---|---|
| $.[?(@.value == "{#MACRO}")] | special "value" | $.[?(@.value == "special \"value\"")] | OK |
| $.[?(@.value == {#MACRO})] | $.[?(@.value == special \"value\")] | Expressão JSONPath ruim |
Quando usada no caminho (path) a macro que pode conter caracteres especiais deve ser quotada com colchetes e aspas duplas:
| JSONPath | valor da macro LLD | Após substituição | Resultado |
|---|---|---|---|
| $.["{#MACRO}"].value | c:\temp | $.["c:\\temp"].value | OK |
| $.{#MACRO}.value | $.c:\\temp.value | Expressão JSONPath ruim |