Este tópico aborda a sintaxe básica das funções JSON com exemplos.
O SLS oferece suporte às seguintes funções JSON.
Em instruções de consulta do Log Service, coloque strings entre aspas simples (''). O Log Service interpreta caracteres sem aspas ou entre aspas duplas ("") como nomes de campos ou colunas. Por exemplo,
'status'representa a string status, enquantostatusou"status"representa o campo de log chamado status.Para expandir o valor de um campo de log formatado em JSON em várias linhas, utilize a cláusula UNNEST. Para mais informações, consulte Cláusula UNNEST.
Se a análise de uma string como JSON falhar, a função retornará null.
Se um log JSON for truncado durante a coleta, a análise com uma função JSON resultará em erro e interromperá a consulta. Para tratar esse erro, envolva a chamada da função em uma expressão TRY para capturar a exceção e permitir que a consulta continue. Exemplo:
* | select message, try(json_parse(message)). Para mais detalhes, consulte Expressão TRY.
|
Nome da função |
Sintaxe |
Descrição |
Suporte SQL |
Suporte SPL |
|
json_array_contains(x, value) |
Verifica se um array JSON contém um valor específico. |
√ |
√ |
|
|
json_array_get(x, index) |
Retorna o elemento em um índice especificado de um array JSON. |
√ |
× |
|
|
json_array_length(x) |
Retorna o número de elementos em um array JSON. |
√ |
√ |
|
|
json_extract(x, json_path) |
Extrai um objeto JSON ou array JSON de um objeto ou array JSON. |
√ |
√ |
|
|
json_extract_scalar(x, json_path) |
Extrai um valor escalar, como string, inteiro ou booleano, de um objeto ou array JSON. |
√ |
√ |
|
|
json_extract_bool(x, json_path) |
Extrai um valor booleano de um objeto ou array JSON. |
√ |
× |
|
|
json_extract_long(x, json_path) |
Extrai um valor bigint de um objeto ou array JSON. |
√ |
× |
|
|
json_extract_double(x, json_path) |
Extrai um valor double de um objeto ou array JSON. |
√ |
× |
|
|
json_format(x) |
Formata um valor JSON como string. |
√ |
√ |
|
|
json_parse(x) |
Analisa uma string e a converte em um valor JSON. |
√ |
√ |
|
|
json_size(x, json_path) |
Retorna o número de elementos em um array JSON ou o número de pares chave-valor em um objeto JSON. |
√ |
√ |
|
|
json_object_flatten(x) |
Achata um objeto JSON em uma estrutura de chave-valor de camada única. |
√ |
× |
Json_array_contains
A função json_array_contains verifica se um array JSON contém um valor específico.
Sintaxe
json_array_contains(x, value)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Um array JSON. |
|
value |
O valor a ser pesquisado no array JSON. |
Tipo de valor retornado
boolean
Exemplo
Verifique se o array JSON [1, 2, 3] contém o valor 2.
-
Instrução de consulta (Testar)
* | SELECT json_array_contains('[1, 2, 3]', 2) A consulta retorna true, pois o array JSON [1, 2, 3] contém o valor 2.
Função json_array_get
Retorna o elemento localizado em um índice especificado dentro de um array JSON.
Sintaxe
json_array_get(x, index)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Um array JSON. |
|
index |
O índice do elemento, iniciando em zero. |
Tipo de retorno
varchar
Exemplo
Obtenha o elemento no índice 1 do array JSON ["a", [3, 9], "c"].
-
Instrução de consulta (Testar)
* | SELECT json_array_get('["a", [3, 9], "c"]', 1) O resultado da consulta é [3,9].
Função json_array_length
Conta os elementos presentes em um array JSON.
Sintaxe
json_array_length(x)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
O array JSON de origem. |
Tipo de valor retornado
bigint
Exemplos
-
Exemplo 1: Contagem dos elementos do array JSON no campo Results.
-
Campo de amostra
Results:[{"EndTime":1626314920},{"FireResult":2}] -
Instrução de consulta e análise
* | SELECT json_array_length(Results) O resultado é 2.
-
-
Exemplo 2: Contagem dos elementos do array JSON no campo time.
-
Campo de amostra
time:["time_local","request_time","upstream_response_time"] -
Instrução de consulta e análise
* | SELECT json_array_length(time) O resultado é 3.
-
Função Json_extract
A função json_extract extrai um valor JSON, como um objeto ou array, de um objeto ou array JSON.
A função json_extract retorna erro para tipos JSON inválidos. Utilize a função json_extract_scalar como alternativa.
Sintaxe
json_extract(x, json_path)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Um objeto JSON ou array JSON. |
|
json_path |
Um caminho JSON, como |
Tipo de valor retornado
Uma string formatada em JSON.
Exemplos
SQL
Extraia o valor do campo EndTime do campo Results.
-
Dados de amostra
Results:[{"EndTime":1626314920},{"FireResult":2}] -
Instrução de consulta
* | SELECT json_extract(Results, '$.0.EndTime') A consulta retorna 1626314920.
SPL
Extraia o valor do campo EndTime do campo Results.
Dados de amostra
Results:[{"EndTime":1626314920},{"FireResult":2}]
Instrução SPL
* | extend a = json_extract(Results, '$.0.EndTime')
Resultado SPL
O resultado inclui o campo a definido como 1626314920.
json_extract_scalar
A função json_extract_scalar extrai um valor escalar (string, inteiro ou booleano) de um objeto ou array JSON.
Sintaxe
json_extract_scalar(x, json_path)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Um objeto JSON ou array JSON. |
|
json_path |
O caminho JSON, como $.store.book[0].title. Para mais informações, consulte Definir o json_path. |
Tipo de retorno
varchar
Exemplos
SQL
Extraia o valor do campo RawResultCount do campo Results, converta-o para bigint e calcule a soma.
-
Dados de amostra
Results:[{"EndTime":1626314920},{"RawResultCount":1}] -
Instrução de consulta
* | SELECT sum(cast(json_extract_scalar(Results,'$.1.RawResultCount') AS bigint) ) O resultado da consulta é 288.
SPL
Extraia o valor do campo RawResultCount do campo Results.
Dados de amostra
Results:[{"EndTime":1626314920},{"RawResultCount":1}]
Instrução SPL
* | extend a = json_extract_scalar(Results, '$.1.RawResultCount')
O valor do campo a é 1.
json_extract_bool
Extrai um valor booleano de um objeto ou array JSON. Retorna null se a extração falhar.
Sintaxe
json_extract_bool(x, json_path)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Um objeto JSON ou array JSON. |
|
json_path |
O caminho JSON, como $.store.book[0].title. Para mais informações, consulte Definir o json_path. |
Tipo de valor retornado
boolean
Exemplo
Extraia um valor booleano do array JSON Results.
-
Campo de amostra
Results:[{"ret":true},{"status":FALSE}] -
Instrução de consulta
* | SELECT json_extract_bool(Results, '$.0.ret') -
Resultado da consulta
A consulta retorna true.
json_extract_long
Extrai um valor bigint de um objeto ou array JSON. Retorna null se a extração falhar.
Sintaxe
json_extract_long(x, json_path)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Um valor JSON. |
|
json_path |
O caminho JSON, como $.store.book[0].title. Para mais informações, consulte Definir o json_path. |
Valor retornado
bigint
Exemplo
Este exemplo extrai um valor bigint do array JSON Results.
-
Campo de amostra
Results:[{"EndTime":1626314920},{"FireResult":2}] -
Instrução de consulta
* | SELECT json_extract_long(Results, '$.0.EndTime') -
Resultado da consulta
Retorna 1626314920.
Json_extract_double
Extrai um valor double de um objeto ou array JSON. Retorna null se a extração falhar.
Sintaxe
json_extract_double(x, json_path)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Um objeto JSON ou array JSON. |
|
json_path |
O caminho JSON, como $.store.book[0].title. Para detalhes, consulte Como definir json_path. |
Tipo de retorno
double
Exemplo
Extraia um valor double do array JSON Results.
-
Campo de amostra
Results:[{"EndTime":1626314920},{"FireResult":2}] -
Instrução de consulta e análise
* | SELECT json_extract_double(Results, '$.0.EndTime') -
Resultado da consulta e análise
A consulta retorna 1626314920.0.
Função json_format
A função json_format formata um valor JSON como string.
Sintaxe
json_format(x)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Um valor JSON. |
Tipo de retorno
Varchar.
Exemplo
Converta o array JSON [1,2,3] para a string '[1, 2, 3]'.
-
Instrução de consulta (Testar)
* | SELECT json_format(json_parse('[1, 2, 3]')) O resultado da consulta é '[1, 2, 3]'.
Função json_parse
A função json_parse converte uma string para o tipo JSON, validando seu formato. No entanto, essa função tem uso limitado. Para extrair valores de uma string JSON, utilize a função json_extract_scalar.
Sintaxe
json_parse(x)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Uma expressão de string. |
Tipo de valor retornado
Tipo JSON.
Exemplos
SQL
-
Exemplo 1
Converte a string '[1, 2, 3]' no array JSON [1, 2, 3].
-
Instrução de consulta (Testar)
* | SELECT json_parse('[1, 2, 3]') O resultado da consulta é [1, 2, 3].
-
-
Exemplo 2
Extrai as chaves do campo
logging.Este exemplo processa o campo
logging, que é um objeto JSON contendo pares chave-valor como message, processName, thread, threadName, module, funcName, levelname e process.-
Instrução de consulta (Testar)
*| SELECT map_keys(try_cast(json_parse(logging) AS map(varchar, json))) O resultado da consulta é ["funcName","levelname","message","module","process","processName","thread","threadName"].
SPL
Converte a string '[1, 2, 3]' no array JSON [1, 2, 3].
Instrução SPL
* | extend a = json_parse('[1, 2, 3]')
Resultado SPL
O valor do campo a é [1, 2, 3].
Função json_size
A função json_size retorna o número de elementos em um objeto ou array JSON.
Sintaxe
json_size(x, json_path)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Um objeto JSON ou array JSON. |
|
json_path |
O caminho JSON, como $.store.book[0].title. Para mais informações, consulte Definir o json_path. |
Tipo de valor retornado
bigint
Exemplo
Este exemplo calcula o número de elementos no campo RawResults.
-
Campo de amostra
Results:[{"EndTime":1626314920,"FireResult":2,"RawResults":[{"_col0":"1094"}]}] -
Instrução de consulta
* | SELECT json_size(Results, '$.0.RawResults') O resultado da consulta é 1.
Função json_object_flatten
Achata um objeto JSON em uma estrutura de chave-valor de camada única.
Sintaxe
json_object_flatten(x)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Especifica o valor JSON a ser achatado. A função retorna null se a entrada não for um objeto JSON. |
Tipo de valor retornado
map(varchar, varchar)
Exemplo
Achate o objeto JSON no campo 'content' em uma estrutura de chave-valor de camada única.
-
Campo de amostra
content: '{"Time":1626314920,"Info":[{"count":"1"}],"Body":"this is test"}' -
Instrução de consulta
select json_object_flatten(content) as data from (values '{"Time":1626314920,"Info":[{"count":"1"}],"Body":"this is test"}') t (content) limit 1; -
Saída
O valor do campo data é {"Time":"1626314920","Info":"[{\"count\":\"1\"}]","Body":"this is test"}. Isso demonstra que o objeto JSON original foi achatado em uma estrutura de chave-valor de camada única.