SQLite
 sql >> Baza danych >  >> RDS >> SQLite

3 sposoby na wyodrębnienie wartości z dokumentu JSON w SQLite

Korzystając z SQLite, możemy użyć następujących metod do wyodrębnienia danych z dokumentu JSON.

json_extract() Funkcja

Jak sama nazwa wskazuje, json_extract() funkcja wyodrębnia i zwraca jedną lub więcej wartości z dobrze sformatowanego JSON.

Przykład:

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

Wynik:

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

Tablice są oparte na zerach, więc licznik zaczyna się od 0 . Dlatego określiliśmy [1] aby uzyskać drugi element w psach tablica, która akurat jest obiektem JSON.

Możemy zwrócić tylko imię psa z tej pozycji w tablicy, dodając do naszej ścieżki:

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

Wynik:

Bark

Możemy użyć json_extract() aby zwrócić wiele ścieżek:

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

Wynik:

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

Kiedy wyodrębniamy wartości z wielu ścieżek, wartości są zwracane w postaci tablicy.

-> Operator

-> operator wyodrębnia podkomponent z dokumentu JSON i zwraca reprezentację JSON tego podkomponentu.

Dlatego możemy zmienić pierwszy przykład na następujący:

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

Wynik:

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

-> operator jest nieco inny niż json_extract() funkcja:

  • -> operator zawsze zwraca reprezentację JSON podkomponentu.
  • json_extract() funkcja zwraca JSON tylko wtedy, gdy istnieją dwa lub więcej argumentów ścieżki (ponieważ wynikiem jest wtedy tablica JSON) lub jeśli pojedynczy argument ścieżki odwołuje się do tablicy lub obiektu.
  • Jeśli istnieje tylko jeden argument ścieżki i ta ścieżka odwołuje się do wartości null JSON, ciągu lub wartości liczbowej, wówczas json_extract() zwraca odpowiednią wartość SQL NULL, TEXT, INTEGER lub REAL.

Dlatego oto, co się dzieje, gdy wyodrębnimy imię psa z naszego JSON:

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

Wynik:

"Bark"

Tym razem jest otoczony cytatami. To dlatego, że zwrócił reprezentację wartości w formacie JSON. Kiedy wyodrębniliśmy tę samą wartość za pomocą json_extract() wcześniej otrzymaliśmy reprezentację wartości SQL.

Możemy jednak również użyć ->> operator zwracający reprezentację SQL.

->> Operator

->> operator działa tak samo jak -> operator, z wyjątkiem tego, że ->> zwraca reprezentację SQL określonego podkomponentu. W szczególności zwraca TEKST SQL , INTEGER , PRAWDZIWE lub NULL wartość reprezentująca wybrany podskładnik lub NULL jeśli podkomponent nie istnieje.

Dlatego oto, co się dzieje, gdy używamy ->> operator do wyodrębnienia imienia psa:

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

Wynik:

Bark

Nie jest już ujęty w cudzysłowy.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zawijać długie wiersze tekstu w wynikach SQLite

  2. 3 sposoby na wygenerowanie skryptu CREATE TABLE z istniejącej tabeli w SQLite

  3. Android SQLite nie aktualizuje danych

  4. (Android) Znajdź ścieżkę /Android w pamięci wewnętrznej

  5. Operator INTERSECT SQLite