Estoy tratando de probar el json
tipo en PostgreSQL 9.3.
Tengo una json
columna llamada data
en una tabla llamada reports
. El JSON se parece a esto:
{
"objects": [
{"src":"foo.png"},
{"src":"bar.png"}
],
"background":"background.png"
}
Me gustaría consultar la tabla para todos los informes que coincidan con el valor 'src' en la matriz 'objetos'. Por ejemplo, ¿es posible consultar la base de datos para todos los informes que coincidan 'src' = 'foo.png'
? Escribí con éxito una consulta que puede coincidir con "background"
:
SELECT data AS data FROM reports where data->>'background' = 'background.png'
Pero como "objects"
tiene una matriz de valores, parece que no puedo escribir algo que funcione. ¿Es posible consultar la base de datos para todos los informes que coincidan 'src' = 'foo.png'
? Revisé estas fuentes pero todavía no puedo obtenerlo:
- http://www.postgresql.org/docs/9.3/static/functions-json.html
- ¿Cómo consulto usando campos dentro del nuevo tipo de datos PostgreSQL JSON?
- http://michael.otacoo.com/postgresql-2/postgres-9-3-feature-highlight-json-operators/
También probé cosas como esta, pero fue en vano:
SELECT json_array_elements(data->'objects') AS data from reports
WHERE data->>'src' = 'foo.png';
No soy un experto en SQL, así que no sé qué estoy haciendo mal.
jsonb
/ pg 9.4. Aparte: para el caso simple (1 nivel de anidamiento), el->
operador también hace el trucojson
en la página 9.3.Crea una tabla con columna como tipo json
Ahora insertemos datos json
Ahora hagamos algunas consultas para obtener datos.
Es posible que haya notado que los resultados vienen con comas invertidas (") y corchetes ([])
Ahora para recuperar solo los valores, use
->>
fuente
seleccione datos -> 'objetos' -> 0 -> 'src' como SRC de la tabla donde datos -> 'objetos' -> 0 -> 'src' = 'foo.png'
fuente