sql >> Database teknologi >  >> RDS >> SQLite

3 måder at udtrække en værdi fra et JSON-dokument i SQLite

Når du bruger SQLite, kan vi bruge følgende metoder til at udtrække data fra et JSON-dokument.

json_extract() Funktion

Som navnet antyder, er json_extract() funktion udtrækker og returnerer en eller flere værdier fra veludformet JSON.

Eksempel:

SELECT json_extract('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'$.dogs[1]'
);

Resultat:

{"name":"Bark","scores":[3,4,8,7]}

Arrays er nul-baserede, og derfor starter optællingen ved 0 . Derfor specificerede vi [1] for at få det andet element i hunde array, som tilfældigvis er et JSON-objekt.

Vi kan kun returnere navnet på hunden på den position i arrayet ved at tilføje til vores sti:

SELECT json_extract('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'$.dogs[1].name'
);

Resultat:

Bark

Vi kan bruge json_extract() for at returnere flere stier:

SELECT json_extract('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'$.dogs[0].name',
'$.dogs[1].name',
'$.dogs[2].name'
);

Resultat:

["Wag","Bark","Woof"]

Når vi udtrækker værdier fra flere stier, returneres værdierne i en matrix.

-> Operatør

-> operatør udtrækker en underkomponent fra et JSON-dokument og returnerer en JSON-repræsentation af den underkomponent.

Derfor kan vi ændre det første eksempel til dette:

SELECT '{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}' -> '$.dogs[1]';

Resultat:

{"name":"Bark","scores":[3,4,8,7]}

-> operatoren er subtilt forskellig fra json_extract() funktion:

  • -> operatør returnerer altid en JSON-repræsentation af underkomponenten.
  • json_extract() funktion returnerer kun JSON, hvis der er to eller flere sti-argumenter (fordi resultatet så er et JSON-array), eller hvis enkeltsti-argumentet refererer til en matrix eller et objekt.
  • Hvis der kun er ét sti-argument, og den sti refererer til en JSON-nul eller en streng eller en numerisk værdi, så json_extract() returnerer den tilsvarende SQL NULL-, TEXT-, INTEGER- eller REAL-værdi.

Derfor er her, hvad der sker, når vi uddrager en hunds navn fra vores JSON:

SELECT '{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}' -> '$.dogs[1].name';

Resultat:

"Bark"

Denne gang er det omgivet af citater. Det er fordi det returnerede en JSON-repræsentation af værdien. Da vi udtrak den samme værdi med json_extract() tidligere fik vi en SQL-repræsentation af værdien.

Vi kan dog også bruge ->> operatør for at returnere en SQL-repræsentation.

->> Operatør

->> operatoren fungerer på samme måde som -> operator, bortset fra at ->> returnerer en SQL-repræsentation af den angivne underkomponent. Specifikt returnerer den en SQL TEKST , INTEGER , RIGTIG eller NULL værdi, der repræsenterer den valgte underkomponent, eller NULL hvis underkomponenten ikke eksisterer.

Derfor er her, hvad der sker, når vi bruger ->> operatør for at udtrække hundens navn:

SELECT '{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}' ->> '$.dogs[1].name';

Resultat:

Bark

Det er ikke længere omgivet af anførselstegn.


  1. Hvordan man fremskynder indlæsning af data fra oracle sql til pandas df

  2. Sådan får du row_number i MySQL

  3. Standardisering af PostgreSQL-sikkerhed på tværs af multi-cloud-miljøer

  4. Find antallet af kolonner i en tabel