

 Amazon Redshift dejará de admitir la creación de nuevas UDF de Python a partir del parche 198. Las UDF de Python existentes seguirán funcionando hasta el 30 de junio de 2026. Para obtener más información, consulte la [publicación del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Función JSON\$1EXTRACT\$1PATH\$1TEXT
<a name="JSON_EXTRACT_PATH_TEXT"></a>

**nota**  
JSON\$1PARSE 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\$1EXTRACT\$1PATH\$1TEXT, le recomendamos que analice las cadenas JSON con [Función JSON\$1PARSE](JSON_PARSE.md) 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](query-super.md).

La función JSON\$1EXTRACT\$1PATH\$1TEXT 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\$1EXTRACT\$1PATH\$1TEXT devuelve `NULL`.

Si el argumento *null\$1if\$1invalid* está establecido en `TRUE` y la cadena JSON no es válida, la función devuelve `NULL` en lugar de un error.

JSON\$1EXTRACT\$1PATH\$1TEXT 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\$1EXTRACT\$1PATH\$1TEXT se produce un error. 

Para obtener información sobre funciones JSON adicionales, consulte [Funciones JSON](json-functions.md). Para obtener más información acerca de cómo trabajar con JSON, consulte [COPY de formato JSON](copy-usage_notes-copy-from-json.md).

## Sintaxis
<a name="JSON_EXTRACT_PATH_TEXT-synopsis"></a>

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

## Argumentos
<a name="JSON_EXTRACT_PATH_TEXT-arguments"></a>

 *json\$1string*  
Una cadena JSON con formato adecuado.

*path\$1elem*  
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\$1if\$1invalid*  
(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](copy-usage_notes-copy-from-json.md#copy-usage-json-escape-characters).

## Tipo de retorno
<a name="JSON_EXTRACT_PATH_TEXT-return"></a>

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

## Ejemplos
<a name="JSON_EXTRACT_PATH_TEXT-examples"></a>

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\$1if\$1invalid* 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                   |
+------------------------+
```

Considere el siguiente ejemplo, que selecciona el valor de la ruta `'farm', 'barn', 'color'`, donde el valor recuperado se encuentra en el tercer nivel. Utilice 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           |
```

Considere las siguientes instrucciones de ejemplo. El valor de *path\$1elem* proporcionado es NULL, por lo que JSON\$1EXTRACT\$1PATH\$1TEXT devuelve NULL independientemente del valor de cualquier otro parámetro. 

```
--Statement where path_elem is NULL and json_string is valid JSON.
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}',NULL);

 json_extract_path_text
------------------------
                   NULL

--Statement where only one path_elem is NULL.
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}','f4',NULL);

 json_extract_path_text
------------------------
                   NULL
                   
--Statement where path_elem is NULL and json_string is invalid JSON.
SELECT json_extract_path_text('invalid_json', NULL);

 json_extract_path_text
------------------------
                   NULL

--Statement where path_elem is NULL and null_if_invalid is FALSE.
SELECT json_extract_path_text(NULL, 0, FALSE);

 json_extract_path_text
------------------------
                   NULL
```

Considere las siguientes instrucciones de ejemplo. Cuando *null\$1if\$1invalid* es TRUE, JSON\$1EXTRACT\$1PATH\$1TEXT devuelve NULL cuando *json\$1string* es JSON no válido. Si *null\$1if\$1invalid* es FALSE o no se ha establecido, la función devuelve un error cuando *json\$1string* no es válido.

```
--Statement with invalid JSON where null_if_invalid is TRUE.
SELECT json_extract_path_text('invalid_json', 0, TRUE);

 json_extract_path_text
------------------------
                   NULL
                                                    
--Statement with invalid JSON where null_if_invalid is FALSE.
SELECT json_extract_path_text('invalid_json', 0, FALSE);

ERROR:  JSON parsing error
```

Considere los siguientes ejemplos, donde *json\$1string* es JSON válido y *path\$1elem* hace referencia a un valor `null` JSON. En este caso, JSON\$1EXTRACT\$1PATH\$1TEXT devuelve NULL. Del mismo modo, cuando *path\$1elem* hace referencia a un valor inexistente, JSON\$1EXTRACT\$1PATH\$1TEXT devuelve NULL, independientemente del valor de *null\$1if\$1invalid*.

```
--Statement selecting a null value.
SELECT json_extract_path_text('[null]', 0);

  json_extract_path_text  
-------------------------
                    NULL   
                             
--Statement selecting a non-existing value.               
SELECT json_extract_path_text('{}', 'a');
       
  json_extract_path_text  
-------------------------
                    NULL
```