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

Operatorer til udpakning af JSON-underkomponenter

Fra og med SQLite version 3.38.0 (frigivet den 22. februar 2022) kan vi nu bruge -> og ->> operatører til at udtrække underkomponenter af JSON-dokumenter.

Målet med disse operatører er at være kompatible med de tilsvarende MySQL- og PostgreSQL-operatører.

Fra og med SQLite 3.38.0 er JSON-funktionerne nu indbyggede. Derfor er det ikke længere nødvendigt at bruge -DSQLITE_ENABLE_JSON1 mulighed for kompileringstid for at aktivere JSON-understøttelse.

Syntaks

Måden disse operatører fungerer på er sådan her:

json -> path
json ->> path

Hvor json er JSON-dokumentet og sti er den vej, vi ønsker at udvinde fra den.

Så vi leverer et JSON-dokument til venstre for operatøren, og vi angiver stien, vi ønsker at udtrække, til højre for det.

Forskellen mellem disse operatører ser sådan ud:

  • -> operatør returnerer altid en JSON-repræsentation af den angivne underkomponent
  • ->> operator returnerer altid en SQL-repræsentation af den angivne underkomponent

Eksempel på -> Operatør

Her er et simpelt eksempel til at demonstrere, hvordan -> operatør virker:

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

Resultat:

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

I dette tilfælde har jeg angivet en sti til '$' som returnerer hele dokumentet.

Lad os specificere en anden sti:

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

Resultat:

"Dog"

Vi kan også gøre det sådan her:

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

Resultat:

"Dog"

Eksempel på ->> Operatør

Her er, hvad der sker, når vi bruger ->> i stedet:

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

Resultat:

Dog

Værdien er ikke angivet, som den var før. Det er fordi -> returnerer en JSON-repræsentation af underkomponenten og ->> returnerer en SQL-repræsentation.

->> operator returnerer en SQL TEXT-, INTEGER-, REAL- eller NULL-værdi, der repræsenterer den valgte underkomponent, eller NULL, hvis underkomponenten ikke eksisterer.

Her er et eksempel med en matrix:

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

Resultat:

5

Hvis værdien udelukkende består af et array, kan vi gøre dette:

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

Resultat:

5

Det returnerer array-elementet ved det angivne indeks (i dette tilfælde 2).

Arrays er nul-baserede (optælling starter ved 0 ), og det er derfor 2 returnerer den tredje vare.


  1. Regulært udtryk (RegEx) for IPv6 Adskilt fra IPv4

  2. Sådan fungerer ELT() i MariaDB

  3. MYSQL Vælg MAX Date i en sammenslutningserklæring

  4. Hvordan finder man de privilegier og roller, der er tildelt en bruger i Oracle?