sql >> Databasteknik >  >> RDS >> SQLite

Operatörer för att extrahera JSON-delkomponenter

Från och med SQLite version 3.38.0 (släppt den 22 februari 2022) kan vi nu använda -> och ->> operatörer för att extrahera underkomponenter av JSON-dokument.

Syftet med dessa operatorer är att vara kompatibla med motsvarande MySQL- och PostgreSQL-operatorer.

Från och med SQLite 3.38.0 är JSON-funktionerna nu inbyggda. Därför är det inte längre nödvändigt att använda -DSQLITE_ENABLE_JSON1 kompileringstid för att aktivera JSON-stöd.

Syntax

Hur dessa operatörer fungerar är så här:

json -> path
json ->> path

Där json är JSON-dokumentet och sökvägen är vägen vi vill extrahera från den.

Så vi tillhandahåller ett JSON-dokument till vänster om operatören, och vi anger sökvägen vi vill extrahera till höger om den.

Skillnaden mellan dessa operatörer ser ut så här:

  • -> operatorn returnerar alltid en JSON-representation av den angivna underkomponenten
  • ->> operatorn returnerar alltid en SQL-representation av den angivna underkomponenten

Exempel på -> Operatör

Här är ett enkelt exempel för att visa hur -> operatören fungerar:

SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$';

Resultat:

{"name":"Wag","type":"Dog"}

I det här fallet angav jag sökvägen '$' som returnerar hela dokumentet.

Låt oss ange en annan sökväg:

SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$.type';

Resultat:

"Dog"

Vi kan också göra så här:

SELECT '{ "name" : "Wag", "type" : "Dog" }' -> 'type';

Resultat:

"Dog"

Exempel på ->> Operatör

Här är vad som händer när vi använder ->> istället:

SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.type';

Resultat:

Dog

Värdet anges inte som det var tidigare. Det beror på att -> returnerar en JSON-representation av underkomponenten och ->> returnerar en SQL-representation.

->> operatorn returnerar ett SQL TEXT-, INTEGER-, REAL- eller NULL-värde som representerar den valda underkomponenten, eller NULL om underkomponenten inte finns.

Här är ett exempel med en array:

SELECT '{ "scores" : [ 9, 7, 5 ] }' ->> '$.scores[2]';

Resultat:

5

Om värdet enbart består av en array kan vi göra detta:

SELECT '[ 9, 7, 5 ]' ->> '2';

Resultat:

5

Det returnerar arrayelementet vid det angivna indexet (i detta fall 2).

Matriser är nollbaserade (räkningen börjar vid 0 ), och det är därför 2 returnerar den tredje artikeln.


  1. Förklaring av JSONB introducerad av PostgreSQL

  2. Hur kommer det sig att sqlplus inte ansluter?

  3. När är det bättre att lagra flaggor som en bitmask istället för att använda en associativ tabell?

  4. Att slå samman flera tabeller returnerar NULL-värdet