es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Extraer valor basado en una clave específica de una matriz de JSONs en Amazon Redshift.

Tengo una tabla en Redshift llamada T1, con el nombre de columna col1 y el tipo de dato varchar. Sin embargo, los datos almacenados en col1 son datos json.

Valor de col1:

[{"id":1,"value":null},{"id":2,"value":null},{"id":3,"value":"https://www.google.co.in"},{"id":4,"value":"India"}]

Ahora quiero extraer datos basados en la clave, es decir, si proporciono el valor de id en la cláusula WHERE, debería recuperar el valor correspondiente a ese id.

He intentado la siguiente consulta:

select json_extract_array_element_text(col1, 0) as json_value,
json_extract_path_text(json_value, 'value') as value 
from T1

No puedo encontrar una manera de filtrar según el id en la consulta anterior.

Agradecería si alguien pudiera ayudarme con eso.

Tags:  

Answer

  1. Avatar for davy.ai

    Para filtrar basado en la identificación en el escenario dado, puedes utilizar la función json_extract_path_text en combinación con la cláusula WHERE. La consulta modificada se vería así:

    SELECT json_extract_array_element_text(col1, seq) as json_value, 
       json_extract_path_text(json_value, 'value') as value
    FROM T1, 
    LATERAL (SELECT i AS seq FROM 
      (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) AS l(i)
    ) tmp
    WHERE json_extract_path_text(json_extract_array_element_text(col1, seq), 'id') = '<valor-de-id>'
    

    En esta consulta, estamos utilizando la función json_extract_path_text para extraer la identificación de los datos JSON y filtrar los resultados basados en el valor de identificación proporcionado en la cláusula WHERE. Estamos utilizando una tabla temporal para asegurarnos de extraer todos los elementos del arreglo JSON.

    Reemplaza ‘‘ con el valor real de la identificación para la cual deseas obtener los datos.

Comments are closed.