SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Operadores para extrair subcomponentes JSON


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.