A partir do SQLite versão 3.38.0 (lançado em 22 de fevereiro de 2022), agora podemos usar o
-> e ->> operadores para extrair subcomponentes de documentos JSON. O objetivo com esses operadores é ser compatível com os operadores MySQL e PostgreSQL equivalentes.
Além disso, a partir do SQLite 3.38.0, as funções JSON agora são integradas. Portanto, não é mais necessário usar o
-DSQLITE_ENABLE_JSON1 opção de tempo de compilação para habilitar o suporte a JSON. Sintaxe
A forma como esses operadores funcionam é assim:
json -> path
json ->> path Onde
json é o documento JSON e o path é o caminho que queremos extrair dele. Portanto, fornecemos um documento JSON à esquerda do operador e especificamos o caminho que queremos extrair à direita.
A diferença entre esses operadores é assim:
- O
->operador sempre retorna uma representação JSON do subcomponente especificado - O
->>operador sempre retorna uma representação SQL do subcomponente especificado
Exemplo do -> Operador
Aqui está um exemplo simples para demonstrar como o
-> operador funciona:SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$'; Resultado:
{"name":"Wag","type":"Dog"} Nesse caso, especifiquei um caminho de
'$' que retorna o documento inteiro. Vamos especificar outro caminho:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$.type'; Resultado:
"Dog"
Também podemos fazer assim:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> 'type'; Resultado:
"Dog"
Exemplo do ->> Operador
Veja o que acontece quando usamos
->> em vez de:SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.type'; Resultado:
Dog
O valor não é cotado como era antes. Isso porque
-> retorna uma representação JSON do subcomponente e ->> retorna uma representação SQL. O
->> O operador retorna um valor SQL TEXT, INTEGER, REAL ou NULL que representa o subcomponente selecionado ou NULL se o subcomponente não existir. Aqui está um exemplo com uma matriz:
SELECT '{ "scores" : [ 9, 7, 5 ] }' ->> '$.scores[2]'; Resultado:
5
Se o valor consiste apenas em um array, podemos fazer isso:
SELECT '[ 9, 7, 5 ]' ->> '2'; Resultado:
5
Isso retorna o elemento da matriz no índice especificado (neste caso 2).
Arrays são baseados em zero (a contagem começa em
0 ), e é por isso que 2 retorna o terceiro item.