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.