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

SQLite JSON_REMOVE()

Możemy użyć SQLite json_remove() funkcja usuwania jednego lub więcej elementów z obiektu lub tablicy JSON.

Podczas wywoływania funkcji przekazujemy oryginalny JSON jako pierwszy argument, po którym następuje co najmniej jedna ścieżka określająca, które elementy należy usunąć. Przez „elementy” rozumiem elementy tablicy lub składowe obiektów (pary klucz/wartość).

Składnia

Składnia wygląda tak:

json_remove(X,P,...)

Gdzie X reprezentuje oryginalny JSON, a P,... reprezentuje ścieżkę/ścieżki do usunięcia.

Przykład

Oto przykład do zademonstrowania:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.age');

Wynik:

{"name":"Fluffy"}

Tutaj określiliśmy $.age ścieżkę i to właśnie zostało usunięte z dokumentu JSON.

Usuń wielu członków

Możemy usunąć wielu członków z obiektu JSON, określając wiele ścieżek oddzielonych przecinkiem:

SELECT json_remove('{ 
        "name" : "Fluffy",
        "type" : "Cat",
        "age" : 10 
    }', 
    '$.type',
    '$.age'
);

Wynik:

{"name":"Fluffy"}

Tablice

Możemy usunąć elementy tablicy, określając indeks elementu:

SELECT json_remove('[ 0, 1, 2, 3 ]', '$[2]');

Wynik:

[0,1,3]

Tablice są liczone od zera, więc liczenie zaczyna się od 0 .

Należy jednak pamiętać o kolejności przeprowadzek. Przeprowadzki następują sekwencyjnie od lewej do prawej. Zmiany spowodowane wcześniejszym usunięciem mogą wpłynąć na wyszukiwanie ścieżki dla kolejnych argumentów.

Oto przykład, jak może to wpłynąć na nasz wynik:

SELECT json_remove('[ 0, 1, 2, 3 ]', 
    '$[0]',
    '$[2]'
);

Wynik:

[1,2]

W tym przypadku element tablicy 0 został usunięty jako pierwszy, a następnie element tablicy 2 został usunięty z pozostałej tablicy. Innymi słowy, druga ścieżka usunęła element z tablicy po tym, jak pierwsza ścieżka została już usunięta.

Wynikowa tablica jest tablicą, której być może nie przewidzieliśmy. Zamiast usuwać elementy 0 i 2 z oryginalnej tablicy usunęliśmy elementy 0 i 3 z oryginalnej tablicy.

Możemy rozwiązać ten problem, zmieniając kolejność ścieżek:

SELECT json_remove('[ 0, 1, 2, 3 ]', 
    '$[2]',
    '$[0]'
);

Wynik:

[1,3]

Brak ścieżek

Argumenty ścieżki są w rzeczywistości opcjonalne. Jeśli wywołamy json_remove() bez argumentów ścieżki zwraca zminimalizowaną wersję wejściowego JSON (tj. Z usuniętym nadmiarem białych znaków):

SELECT json_remove('{ 
        "name" : "Fluffy",
        "type" : "Cat",
        "age" : 10 
    }'
);

Wynik:

{"name":"Fluffy","type":"Cat","age":10}

Jest to ten sam wynik, który otrzymalibyśmy, gdybyśmy użyli json() funkcja zamiast json_remove() .

Nieistniejąca ścieżka

Określenie ścieżki, która nie istnieje w wejściowym pliku JSON, spowoduje zwrócenie oryginalnego JSON bez zmian:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.type');

Wynik:

{"name":"Fluffy","age":10}

Nieprawidłowe ścieżki

Otrzymamy błąd, jeśli nasza ścieżka nie jest dobrze uformowana:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', 'age');

Wynik:

Runtime error: JSON path error near 'age'

W tym przypadku zapomniałem dołączyć $. z przodu ścieżki.

Nieprawidłowe dokumenty JSON

Otrzymamy również błąd, że JSON nie jest poprawnie sformułowany:

SELECT json_remove('{ "name" : "Fluffy", "age" }', '$.age');

Wynik:

Runtime error: malformed JSON

Tym razem błąd mówi nam, że nasz JSON jest zniekształcony.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pułapki i pułapki SQLite

  2. Ustaw domyślną wartość dla kolumny w SQLite:DEFAULT Constraint

  3. android.database.sqlite.SQLiteException:blisko s:błąd składni (kod 1):,

  4. Symbole wieloznaczne Androida SQLite

  5. Baza danych pokoju Android, pobierz konkretną wartość ostatnio wprowadzonego rekordu