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

Operator

W SQLite ->> operator wyodrębnia podskładnik z dokumentu JSON i zwraca reprezentację SQL tego podskładnika.

->> operator został po raz pierwszy wprowadzony w wersji SQLite 3.38.0 (wydanej 22 lutego 2022).

Składnia

Składnia wygląda tak:

json ->> path

Gdzie json jest dokumentem JSON i ścieżką jest ścieżką do podkomponentu, który chcemy z niego 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.

->> operator zawsze zwraca reprezentację SQL określonego podkomponentu. Aby zwrócić reprezentację JSON, użyj -> zamiast tego operatora.

Przykłady

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 również całkowicie pominąć znak dolara i kropkę, w ten sposób:

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

Wynik:

Dog

Tutaj jest z większym dokumentem JSON:

SELECT '[
        { 
        "user" : "Spike",
        "age" : 30,
        "scores" : [ 9, 7, 3 ]
        },
        { 
        "user" : "Faye",
        "age" : 25,
        "scores" : [ 90, 87, 93 ]
        },
        { 
        "user" : "Jet",
        "age" : 40,
        "scores" : [ 50, 38, 67 ]
        }
        ]' ->> '$[0]';

Wynik:

{"user":"Spike","age":30,"scores":[9,7,3]}

W SQLite tablice są oparte na zerach, więc określanie [0] zwraca pierwszy element tablicy.

Gdybyśmy chcieli tylko uzyskać wyniki tego użytkownika, moglibyśmy to zrobić:

SELECT '[
        { 
        "user" : "Spike",
        "age" : 30,
        "scores" : [ 9, 7, 3 ]
        },
        { 
        "user" : "Faye",
        "age" : 25,
        "scores" : [ 90, 87, 93 ]
        },
        { 
        "user" : "Jet",
        "age" : 40,
        "scores" : [ 50, 38, 67 ]
        }
        ]' ->> '$[0].scores';

Wynik:

[9,7,3]

Możemy wejść jeszcze głębiej i wyodrębnić konkretną partyturę:

SELECT '[
        { 
        "user" : "Spike",
        "age" : 30,
        "scores" : [ 9, 7, 3 ]
        },
        { 
        "user" : "Faye",
        "age" : 25,
        "scores" : [ 90, 87, 93 ]
        },
        { 
        "user" : "Jet",
        "age" : 40,
        "scores" : [ 50, 38, 67 ]
        }
        ]' ->> '$[0].scores[1]';

Wynik:

7

Nieistniejąca ścieżka

Jeśli ścieżka nie istnieje w JSON, zwracana jest wartość null:

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

Wynik:

null

Zauważ, że w SQLite możesz użyć .nullvalue aby określić ciąg do wyprowadzania, gdy zwrócona zostanie wartość null. W moim przypadku wcześniej uruchomiłem następujące polecenie:

.nullvalue null

Oznacza to, że tekst null powinna być wypisywana zawsze, gdy zwracana jest wartość null. Dlatego powyższy przykład wyświetla tekst null . Gdybym tego nie zrobił, wynik mógłby być pusty.

Nieprawidłowy JSON

Jeśli pierwszy argument nie jest prawidłowym JSON, zgłaszany jest błąd:

SELECT '{ "name" }' ->> '$';

Wynik:

Runtime error: malformed JSON

Nieprawidłowa ścieżka

A jeśli drugi argument nie jest prawidłową ścieżką, zgłaszany jest błąd:

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

Wynik:

Runtime error: JSON path error near 'name'

W tym przypadku zapomniałem podać kropkę (. ) między znakiem dolara ($ ) i nazwa .

Jak jednak wspomniano, możliwe jest całkowite pominięcie znaku dolara i kropki:

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

Wynik:

Wag

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 sposoby na usunięcie zduplikowanych wierszy w SQLite

  2. Jak uzyskać liczbę wierszy w sqlite za pomocą Androida?

  3. Jak sformatować datę i godzinę w SQLite

  4. Synonimy i próbki Wordnet sqlite

  5. Zamów SQLite według