sql >> Databáze >  >> RDS >> SQLite

3 způsoby, jak extrahovat hodnotu z dokumentu JSON v SQLite

Při použití SQLite můžeme k extrakci dat z JSON dokumentu použít následující metody.

json_extract() Funkce

Jak jeho název napovídá, json_extract() funkce extrahuje a vrátí jednu nebo více hodnot ze správně vytvořeného JSON.

Příklad:

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

Výsledek:

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

Pole jsou založeny na nule, takže počet začíná na 0 . Proto jsme zadali [1] získat druhý prvek v rámci dogs pole, což je shodou okolností objekt JSON.

Můžeme vrátit pouze jméno psa na této pozici v poli přidáním do naší cesty:

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'
);

Výsledek:

Bark

Můžeme použít json_extract() pro vrácení více cest:

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'
);

Výsledek:

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

Když extrahujeme hodnoty z více cest, hodnoty jsou vráceny v poli.

Kód -> Operátor

-> operátor extrahuje dílčí komponentu z dokumentu JSON a vrací reprezentaci JSON této dílčí komponenty.

Proto můžeme změnit první příklad na tento:

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

Výsledek:

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

-> operátor se mírně liší od json_extract() funkce:

  • -> operátor vždy vrací reprezentaci JSON podsoučásti.
  • json_extract() funkce vrací JSON pouze v případě, že existují dva nebo více argumentů cesty (protože výsledkem je pak pole JSON) nebo pokud jediný argument cesty odkazuje na pole nebo objekt.
  • Pokud existuje pouze jeden argument cesty a tato cesta odkazuje na hodnotu JSON null nebo řetězec nebo číselnou hodnotu, pak json_extract() vrátí odpovídající hodnotu SQL NULL, TEXT, INTEGER nebo REAL.

Zde je tedy to, co se stane, když z našeho JSON vyjmeme jméno psa:

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

Výsledek:

"Bark"

Tentokrát je obklopen uvozovkami. Je to proto, že vrátil reprezentaci hodnoty JSON. Když jsme extrahovali stejnou hodnotu pomocí json_extract() dříve jsme získali SQL reprezentaci hodnoty.

Můžeme však také použít ->> operátor vrátit reprezentaci SQL.

->> Operátor

->> Operátor funguje stejně jako -> operátor, kromě ->> vrátí SQL reprezentaci zadané dílčí komponenty. Konkrétně vrací SQL TEXT , INTEGER , REAL , nebo NULL hodnota, která představuje vybranou dílčí komponentu, nebo NULL pokud dílčí komponenta neexistuje.

Zde je proto, co se stane, když použijeme ->> operátor k vyjmutí jména psa:

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

Výsledek:

Bark

Již není uzavřeno v uvozovkách.


  1. Výkon MySQL:MySQL vs. MariaDB

  2. Úroveň izolace SNAPSHOT

  3. Nainstalujte rozšíření SQL Server Agent Extension v Azure Data Studio

  4. Šifrujte data v SQLite