Función JSON_EXTRACT_PATH_TEXT - Amazon Redshift

Función JSON_EXTRACT_PATH_TEXT

nota

JSON_PARSE y sus funciones asociadas analizan los valores JSON como SUPER, que Amazon Redshift analiza de forma más eficiente que VARCHAR.

En lugar de usar JSON_EXTRACT_PATH_TEXT, le recomendamos que analice las cadenas JSON con Función JSON_PARSE para obtener un valor SUPER. A continuación, consulte el elemento que desee utilizando la sintaxis de value.attribute. Para obtener más información sobre cómo consultar los elementos de una matriz en valores SUPER, vaya a Consulta de datos semiestructurados.

La función JSON_EXTRACT_PATH_TEXT devuelve el valor del par clave-valor al que se hace referencia en una serie de elementos de ruta de una cadena JSON. La ruta JSON se puede anidar hasta un máximo de cinco niveles de profundidad. Los elementos de ruta distinguen entre mayúsculas y minúsculas. Si un elemento de ruta no existe en la cadena JSON, JSON_EXTRACT_PATH_TEXT devuelve NULL.

Si el argumento null_if_invalid está establecido en true y la cadena JSON no es válida, la función devuelve NULL en lugar de un error.

JSON_EXTRACT_PATH_TEXT tiene un máximo de tamaño de datos de 64 KB. Por lo tanto, si algún registro JSON tiene más de 64 KB, al procesarlo con JSON_EXTRACT_PATH_TEXT se produce un error.

Para obtener información sobre funciones JSON adicionales, consulte Funciones JSON. Para obtener más información acerca de cómo trabajar con JSON, consulte COPY de formato JSON.

Sintaxis

JSON_EXTRACT_PATH_TEXT('json_string', 'path_elem' [,'path_elem'[, …] ] [, null_if_invalid ] )

Argumentos

json_string

Una cadena JSON con formato adecuado.

path_elem

Un elemento de ruta en una cadena JSON. Se necesita al menos un elemento de ruta. Se pueden especificar elementos de ruta adicionales, hasta un máximo de cinco niveles de profundidad.

null_if_invalid

(Opcional) Un valor BOOLEAN que especifica que se devuelva NULL si la cadena JSON de entrada no es válida en lugar de devolver un error. Para devolver NULL si la cadena JSON no es válida, especifique true (t). Para devolver un error si la cadena JSON no es válida, especifique false (f). El valor predeterminado es false.

En una cadena JSON, Amazon Redshift reconoce a \n como un carácter de línea nueva y a \t como un carácter de tabulación. Para cargar una barra inversa, aplique escape con una barra inversa (\\). Para obtener más información, consulte Caracteres de escape en JSON.

Tipo de retorno

VARCHAR

Una cadena VARCHAR que representa el valor JSON al que se hace referencia en los elementos de ruta.

Ejemplos

Para devolver el valor para la ruta 'f4', 'f6', use el siguiente ejemplo.

SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}','f4', 'f6'); +------------------------+ | json_extract_path_text | +------------------------+ | star | +------------------------+

Para devolver un error porque la cadena JSON no es válida, use el siguiente ejemplo.

SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}','f4', 'f6'); ERROR: invalid json object {"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}

Para establecer null_if_invalid en true, para que la instrucción devuelva NULL por cadena JSON no válida en lugar de devolver un error, use el siguiente ejemplo.

SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}','f4', 'f6',true); +------------------------+ | json_extract_path_text | +------------------------+ | NULL | +------------------------+

Para devolver el valor para la ruta 'farm', 'barn', 'color', donde el valor recuperado se encuentra en el tercer nivel, use el siguiente ejemplo. Este ejemplo está formateado con una herramienta de lint JSON para facilitar su lectura.

SELECT JSON_EXTRACT_PATH_TEXT('{ "farm": { "barn": { "color": "red", "feed stocked": true } } }', 'farm', 'barn', 'color'); +------------------------+ | json_extract_path_text | +------------------------+ | red | +------------------------+

Para devolver NULL porque falta el elemento 'color', use el siguiente ejemplo. Este ejemplo está formateado con una herramienta de lint JSON.

SELECT JSON_EXTRACT_PATH_TEXT('{ "farm": { "barn": {} } }', 'farm', 'barn', 'color'); +------------------------+ | json_extract_path_text | +------------------------+ | NULL | +------------------------+

Si el JSON es válido, el intento de extracción de un elemento que falta devuelve NULL.

Para devolver el valor para la ruta 'house', 'appliances', 'washing machine', 'brand', use el siguiente ejemplo.

SELECT JSON_EXTRACT_PATH_TEXT('{ "house": { "address": { "street": "123 Any St.", "city": "Any Town", "state": "FL", "zip": "32830" }, "bathroom": { "color": "green", "shower": true }, "appliances": { "washing machine": { "brand": "Any Brand", "color": "beige" }, "dryer": { "brand": "Any Brand", "color": "white" } } } }', 'house', 'appliances', 'washing machine', 'brand'); +------------------------+ | json_extract_path_text | +------------------------+ | Any Brand | +------------------------+

En el siguiente ejemplo, se crea una tabla de ejemplo y se rellena con valores SUPER. A continuación, se devuelve el valor de la ruta 'f2' de ambas filas.

CREATE TABLE json_example(id INT, json_text SUPER); INSERT INTO json_example VALUES (1, JSON_PARSE('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}')), (2, JSON_PARSE('{ "farm": { "barn": { "color": "red", "feed stocked": true } } }')); SELECT * FROM json_example; id | json_text ------------+-------------------------------------------- 1 | {"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}} 2 | {"farm":{"barn":{"color":"red","feed stocked":true}}} SELECT id, JSON_EXTRACT_PATH_TEXT(JSON_SERIALIZE(json_text), 'f2') FROM json_example; id | json_text ------------+-------------------------------------------- 1 | {"f3":1} 2 |