Estou tentando testar o json
tipo no PostgreSQL 9.3.
Eu tenho uma json
coluna chamada data
em uma tabela chamada reports
. O JSON se parece com isto:
{
"objects": [
{"src":"foo.png"},
{"src":"bar.png"}
],
"background":"background.png"
}
Eu gostaria de consultar a tabela para todos os relatórios que correspondem ao valor 'src' na matriz 'objetos'. Por exemplo, é possível consultar o banco de dados para todos os relatórios correspondentes 'src' = 'foo.png'
? Escrevi com sucesso uma consulta que pode corresponder a "background"
:
SELECT data AS data FROM reports where data->>'background' = 'background.png'
Mas "objects"
, uma vez que tem uma matriz de valores, não consigo escrever algo que funcione. É possível consultar o banco de dados para todos os relatórios correspondentes 'src' = 'foo.png'
? Procurei por essas fontes, mas ainda não consigo:
- http://www.postgresql.org/docs/9.3/static/functions-json.html
- Como faço uma consulta usando campos dentro do novo tipo de dados JSON PostgreSQL?
- http://michael.otacoo.com/postgresql-2/postgres-9-3-feature-highlight-json-operators/
Eu também tentei coisas assim, mas sem sucesso:
SELECT json_array_elements(data->'objects') AS data from reports
WHERE data->>'src' = 'foo.png';
Não sou um especialista em SQL, então não sei o que estou fazendo de errado.
jsonb
/ pg 9.4. À parte: para o caso simples (1 nível de aninhamento), o->
operador também faz o truquejson
na página 9.3.Crie uma tabela com coluna como tipo json
Agora vamos inserir os dados json
Agora vamos fazer algumas consultas para buscar dados
Você deve ter notado que os resultados vêm com vírgulas invertidas (") e colchetes ([])
Agora, para recuperar apenas os valores, basta usar
->>
fonte
selecione dados -> 'objetos' -> 0 -> 'src' como SRC da tabela onde dados -> 'objetos' -> 0 -> 'src' = 'foo.png'
fonte