Począwszy od wersji SQLite 3.38.0 (wydanej 22 lutego 2022), możemy teraz używać ->
i ->> operatorów do wyodrębniania podkomponentów dokumentów JSON.
Celem tych operatorów jest zapewnienie zgodności z równoważnymi operatorami MySQL i PostgreSQL.
Ponadto, począwszy od SQLite 3.38.0, funkcje JSON są teraz wbudowane. Dlatego nie jest już konieczne używanie -DSQLITE_ENABLE_JSON1
opcja czasu kompilacji, aby włączyć obsługę JSON.
Składnia
Sposób działania tych operatorów jest następujący:
json -> path
json ->> path
Gdzie json
jest dokumentem JSON i ścieżką
to ścieżka, którą chcemy z niej wyodrębnić.
Podajemy więc dokument JSON po lewej stronie operatora i określamy ścieżkę, którą chcemy wyodrębnić po jego prawej stronie.
Różnica między tymi operatorami wygląda następująco:
->
operator zawsze zwraca reprezentację JSON określonego podkomponentu->>
operator zawsze zwraca reprezentację SQL określonego podkomponentu
Przykład ->
Operator
Oto prosty przykład pokazujący, jak ->
operator pracuje:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$';
Wynik:
{"name":"Wag","type":"Dog"}
W tym przypadku określiłem ścieżkę '$'
który zwraca cały dokument.
Określmy inną ścieżkę:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$.type';
Wynik:
"Dog"
Możemy to również zrobić w ten sposób:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> 'type';
Wynik:
"Dog"
Przykład ->>
Operator
Oto, co się dzieje, gdy używamy ->>
zamiast tego:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.type';
Wynik:
Dog
Wartość nie jest cytowana tak jak wcześniej. To dlatego, że ->
zwraca reprezentację JSON podkomponentu i ->>
zwraca reprezentację SQL.
->> operator zwraca wartość SQL TEXT, INTEGER, REAL lub NULL, która reprezentuje wybrany podskładnik, lub NULL, jeśli podskładnik nie istnieje.
Oto przykład z tablicą:
SELECT '{ "scores" : [ 9, 7, 5 ] }' ->> '$.scores[2]';
Wynik:
5
Jeśli wartość składa się wyłącznie z tablicy, możemy to zrobić:
SELECT '[ 9, 7, 5 ]' ->> '2';
Wynik:
5
To zwraca element tablicy o określonym indeksie (w tym przypadku 2).
Tablice są od zera (liczenie zaczyna się od 0
) i dlatego 2
zwraca trzeci element.