Este tema aborda la sintaxis básica de las funciones JSON con ejemplos.
SLS admite las siguientes funciones JSON.
En las instrucciones de consulta de Log Service, encierre las cadenas entre comillas simples (''). Log Service interpreta los caracteres sin comillas o entre comillas dobles ("") como un nombre de campo o de columna. Por ejemplo,
'status'representa la cadena status, mientras questatuso"status"representa el campo de registro denominado status.Para expandir el valor de un campo de registro con formato JSON en varias filas, utilice la cláusula UNNEST. Para obtener más información, consulte UNNEST clause.
Si una cadena no se puede analizar como JSON, la función devuelve null.
Si un registro JSON se trunca durante la recolección, analizarlo con una función JSON genera un error y cancela la consulta. Para gestionar este error, envuelva la llamada a la función en una expresión TRY para capturar la excepción y permitir que la consulta continúe. Por ejemplo,
* | select message, try(json_parse(message)). Para obtener más información, consulte TRY expression.
|
Nombre de la función |
Sintaxis |
Descripción |
Compatibilidad con SQL |
Compatibilidad con SPL |
|
json_array_contains(x, value) |
Comprueba si un arreglo JSON contiene un valor específico. |
√ |
√ |
|
|
json_array_get(x, index) |
Devuelve el elemento en un índice especificado de un arreglo JSON. |
√ |
× |
|
|
json_array_length(x) |
Devuelve el número de elementos en un arreglo JSON. |
√ |
√ |
|
|
json_extract(x, json_path) |
Extrae un objeto JSON o un arreglo JSON desde un objeto JSON o un arreglo JSON. |
√ |
√ |
|
|
json_extract_scalar(x, json_path) |
Extrae un valor escalar, como una cadena, un entero o un valor booleano, desde un objeto JSON o un arreglo JSON. |
√ |
√ |
|
|
json_extract_bool(x, json_path) |
Extrae un valor booleano desde un objeto JSON o un arreglo JSON. |
√ |
× |
|
|
json_extract_long(x, json_path) |
Extrae un valor bigint desde un objeto JSON o un arreglo JSON. |
√ |
× |
|
|
json_extract_double(x, json_path) |
Extrae un valor double desde un objeto JSON o un arreglo JSON. |
√ |
× |
|
|
json_format(x) |
Formatea un valor JSON como una cadena. |
√ |
√ |
|
|
json_parse(x) |
Analiza una cadena y la convierte en un valor JSON. |
√ |
√ |
|
|
json_size(x, json_path) |
Devuelve el número de elementos en un arreglo JSON o el número de pares clave-valor en un objeto JSON. |
√ |
√ |
|
|
json_object_flatten(x) |
Aplana un objeto JSON en una estructura de clave-valor de un solo nivel. |
√ |
× |
Json_array_contains
La función json_array_contains comprueba si un arreglo JSON contiene un valor específico.
Sintaxis
json_array_contains(x, value)
Parámetros
|
Parámetro |
Descripción |
|
x |
Un arreglo JSON. |
|
value |
El valor que se buscará en el arreglo JSON. |
Tipo de valor devuelto
boolean
Ejemplo
Compruebe si el arreglo JSON [1, 2, 3] contiene el valor 2.
-
Instrucción de consulta (Probar)
* | SELECT json_array_contains('[1, 2, 3]', 2) La consulta devuelve true porque el arreglo JSON [1, 2, 3] contiene el valor 2.
Función json_array_get
Devuelve el elemento en un índice especificado de un arreglo JSON.
Sintaxis
json_array_get(x, index)
Parámetros
|
Parámetro |
Descripción |
|
x |
Un arreglo JSON. |
|
index |
El índice del elemento, basado en cero. |
Tipo de retorno
varchar
Ejemplo
Devuelve el elemento en el índice 1 del arreglo JSON ["a", [3, 9], "c"].
-
Instrucción de consulta (Probar)
* | SELECT json_array_get('["a", [3, 9], "c"]', 1) El resultado de la consulta es [3.9].
Función json_array_length
Cuenta los elementos en un arreglo JSON.
Sintaxis
json_array_length(x)
Parámetros
|
Parámetro |
Descripción |
|
x |
El arreglo JSON de origen. |
Tipo de valor devuelto
bigint
Ejemplos
-
Ejemplo 1: Cuenta los elementos del arreglo JSON en el campo Results.
-
Campo de muestra
Results:[{"EndTime":1626314920},{"FireResult":2}] -
Instrucción de consulta y análisis
* | SELECT json_array_length(Results) El resultado es 2.
-
-
Ejemplo 2: Cuenta los elementos del arreglo JSON en el campo time.
-
Campo de muestra
time:["time_local","request_time","upstream_response_time"] -
Instrucción de consulta y análisis
* | SELECT json_array_length(time) El resultado es 3.
-
Función Json_extract
La función json_extract extrae un valor JSON, como un objeto JSON o un arreglo JSON, desde un objeto JSON o un arreglo JSON.
La función json_extract devuelve un error para tipos JSON no válidos. Utilice la función json_extract_scalar en su lugar.
Sintaxis
json_extract(x, json_path)
Parámetros
|
Parámetro |
Descripción |
|
x |
Un objeto JSON o un arreglo JSON. |
|
json_path |
Una ruta JSON, como |
Tipo de valor devuelto
Una cadena con formato JSON.
Ejemplos
SQL
Extraiga el valor del campo EndTime del campo Results.
-
Datos de muestra
Results:[{"EndTime":1626314920},{"FireResult":2}] -
Instrucción de consulta
* | SELECT json_extract(Results, '$.0.EndTime') La consulta devuelve 1626314920.
SPL
Extraiga el valor del campo EndTime del campo Results.
Datos de muestra
Results:[{"EndTime":1626314920},{"FireResult":2}]
Instrucción SPL
* | extend a = json_extract(Results, '$.0.EndTime')
Resultado SPL
El resultado incluye el campo a establecido en 1626314920.
json_extract_scalar
La función json_extract_scalar extrae un valor escalar (cadena, entero o booleano) desde un objeto JSON o un arreglo JSON.
Sintaxis
json_extract_scalar(x, json_path)
Parámetros
|
Parámetro |
Descripción |
|
x |
Un objeto JSON o un arreglo JSON. |
|
json_path |
La ruta JSON, como $.store.book[0].title. Para obtener más información, consulte Set the json_path. |
Tipo de retorno
varchar
Ejemplos
SQL
Extraiga el valor del campo RawResultCount del campo Results, convierta el valor a bigint y luego calcule la suma.
-
Datos de muestra
Results:[{"EndTime":1626314920},{"RawResultCount":1}] -
Instrucción de consulta
* | SELECT sum(cast(json_extract_scalar(Results,'$.1.RawResultCount') AS bigint) ) El resultado de la consulta es 288.
SPL
Extraiga el valor del campo RawResultCount del campo Results.
Datos de muestra
Results:[{"EndTime":1626314920},{"RawResultCount":1}]
Instrucción SPL
* | extend a = json_extract_scalar(Results, '$.1.RawResultCount')
El valor del campo a es 1.
json_extract_bool
Extrae un valor booleano desde un objeto JSON o un arreglo JSON. Devuelve null si falla la extracción.
Sintaxis
json_extract_bool(x, json_path)
Parámetros
|
Parámetro |
Descripción |
|
x |
Un objeto JSON o un arreglo JSON. |
|
json_path |
La ruta JSON, como $.store.book[0].title. Para obtener más información, consulte Set the json_path. |
Tipo de valor devuelto
boolean
Ejemplo
Extraiga un valor booleano del arreglo JSON Results.
-
Campo de muestra
Results:[{"ret":true},{"status":FALSE}] -
Instrucción de consulta
* | SELECT json_extract_bool(Results, '$.0.ret') -
Resultado de la consulta
La consulta devuelve true.
json_extract_long
Extrae un valor bigint desde un objeto JSON o un arreglo JSON. Devuelve null si falla la extracción.
Sintaxis
json_extract_long(x, json_path)
Parámetros
|
Parámetro |
Descripción |
|
x |
Un valor JSON. |
|
json_path |
La ruta JSON, como $.store.book[0].title. Para obtener más información, consulte Set the json_path. |
Valor devuelto
bigint
Ejemplo
Este ejemplo extrae un valor bigint del arreglo JSON Results.
-
Campo de muestra
Results:[{"EndTime":1626314920},{"FireResult":2}] -
Instrucción de consulta
* | SELECT json_extract_long(Results, '$.0.EndTime') -
Resultado de la consulta
Devuelve 1626314920.
Json_extract_double
Extrae un valor double desde un objeto JSON o un arreglo JSON. Devuelve null si falla la extracción.
Sintaxis
json_extract_double(x, json_path)
Parámetros
|
Parámetro |
Descripción |
|
x |
Un objeto JSON o un arreglo JSON. |
|
json_path |
La ruta JSON, como $.store.book[0].title. Para obtener más detalles, consulte How to set json_path. |
Tipo de retorno
double
Ejemplo
Extraiga un valor double del arreglo JSON Results.
-
Campo de muestra
Results:[{"EndTime":1626314920},{"FireResult":2}] -
Instrucción de consulta y análisis
* | SELECT json_extract_double(Results, '$.0.EndTime') -
Resultado de la consulta y el análisis
La consulta devuelve 1626314920.0.
Función json_format
La función json_format formatea un valor JSON como una cadena.
Sintaxis
json_format(x)
Parámetros
|
Parámetro |
Descripción |
|
x |
Un valor JSON. |
Tipo de retorno
Varchar.
Ejemplo
Convierte el arreglo JSON [1,2,3] a la cadena '[1, 2, 3]'.
-
Instrucción de consulta (Probar)
* | SELECT json_format(json_parse('[1, 2, 3]')) El resultado de la consulta es '[1, 2, 3]'.
Función json_parse
La función json_parse convierte una cadena al tipo JSON y valida su formato. Sin embargo, esta función tiene un uso limitado. Para extraer valores de una cadena JSON, utilice la función json_extract_scalar.
Sintaxis
json_parse(x)
Parámetros
|
Parámetro |
Descripción |
|
x |
Una expresión de cadena. |
Tipo de valor devuelto
Tipo JSON.
Ejemplos
SQL
-
Ejemplo 1
Convierte la cadena '[1, 2, 3]' al arreglo JSON [1, 2, 3].
-
Instrucción de consulta (Probar)
* | SELECT json_parse('[1, 2, 3]') El resultado de la consulta es [1, 2, 3].
-
-
Ejemplo 2
Extrae las claves del campo
logging.Este ejemplo procesa el campo
logging, que es un objeto JSON que contiene pares clave-valor como message, processName, thread, threadName, module, funcName, levelname y process.-
Instrucción de consulta (Probar)
*| SELECT map_keys(try_cast(json_parse(logging) AS map(varchar, json))) El resultado de la consulta es ["funcName","levelname","message","module","process","processName","thread","threadName"].
SPL
Convierte la cadena '[1, 2, 3]' al arreglo JSON [1, 2, 3].
Instrucción SPL
* | extend a = json_parse('[1, 2, 3]')
Resultado SPL
El valor del campo a es [1, 2, 3].
Función json_size
La función json_size devuelve el número de elementos en un objeto JSON o un arreglo JSON.
Sintaxis
json_size(x, json_path)
Parámetros
|
Parámetro |
Descripción |
|
x |
Un objeto JSON o un arreglo JSON. |
|
json_path |
La ruta JSON, como $.store.book[0].title. Para obtener más información, consulte Set the json_path. |
Tipo de valor devuelto
bigint
Ejemplo
Este ejemplo calcula el número de elementos en el campo RawResults.
-
Campo de muestra
Results:[{"EndTime":1626314920,"FireResult":2,"RawResults":[{"_col0":"1094"}]}] -
Instrucción de consulta
* | SELECT json_size(Results, '$.0.RawResults') El resultado de la consulta es 1.
Función json_object_flatten
Aplana un objeto JSON en una estructura de clave-valor de un solo nivel.
Sintaxis
json_object_flatten(x)
Parámetros
|
Parámetro |
Descripción |
|
x |
Especifica el valor JSON que se va a aplanar. La función devuelve null si la entrada no es un objeto JSON. |
Tipo de valor devuelto
map(varchar, varchar)
Ejemplo
Aplana el objeto JSON en el campo 'content' en una estructura de clave-valor de un solo nivel.
-
Campo de muestra
content: '{"Time":1626314920,"Info":[{"count":"1"}],"Body":"this is test"}' -
Instrucción de consulta
select json_object_flatten(content) as data from (values '{"Time":1626314920,"Info":[{"count":"1"}],"Body":"this is test"}') t (content) limit 1; -
Salida
El valor del campo data es {"Time":"1626314920","Info":"[{\"count\":\"1\"}]","Body":"this is test"}. Esto muestra que el objeto JSON original se ha aplanado en una estructura de clave-valor de un solo nivel.