Mysql
 sql >> Baza danych >  >> RDS >> Mysql

JSON_REMOVE() – Usuń dane z dokumentu JSON w MySQL

W MySQL funkcja JSON_REMOVE() funkcja usuwa dane z dokumentu JSON i zwraca wynik.

Jako pierwszy argument podajesz dokument JSON, po którym następuje ścieżka, z której chcesz usunąć dane. W razie potrzeby możesz podać wiele ścieżek.

Składnia

Składnia wygląda tak:

JSON_REMOVE(json_doc, path[, path] ...)

Gdzie json_doc jest dokumentem JSON i path jest ścieżką, z której można usunąć dane.

path argumenty są oceniane od lewej do prawej. Dokument utworzony przez ocenę jednej ścieżki staje się nową wartością, względem której oceniana jest następna ścieżka.

Pierwszy argument musi być prawidłowym dokumentem JSON, w przeciwnym razie wystąpi błąd.

Również path argument musi być prawidłowym wyrażeniem ścieżki i nie może być $ lub zawiera * lub ** symbol wieloznaczny, w przeciwnym razie wystąpi błąd.

Przykład 1 – Podstawowe użycie

Oto przykład do zademonstrowania.

SELECT JSON_REMOVE('{"a": 1, "b": 2, "c": 3}', '$.b') AS 'Result';

Wynik:

+------------------+
| Result           |
+------------------+
| {"a": 1, "c": 3} |
+------------------+

W tym przypadku usunęliśmy parę klucz/wartość z kluczem b . Dzieje się tak, ponieważ określiliśmy $.b jako drugi argument.

Oto kolejny przykład:

SELECT 
  JSON_REMOVE('{"Name": "Homer", "Gender": "Male", "Age": 39}', '$.Age') AS 'Result';

Wynik:

+-------------------------------------+
| Result                              |
+-------------------------------------+
| {"Name": "Homer", "Gender": "Male"} |
+-------------------------------------+

Przykład 2 – Nieistniejąca ścieżka

Jeśli określisz ścieżkę, która nie istnieje, nic nie zostanie usunięte. Oryginalny dokument JSON jest zwracany bez modyfikacji.

SELECT 
  JSON_REMOVE('{"Name": "Homer", "Age": 39}', '$.Gender') AS 'Result';

Wynik:

+------------------------------+
| Result                       |
+------------------------------+
| {"Age": 39, "Name": "Homer"} |
+------------------------------+

Przykład 3 – Tablice

Oto przykład użycia tablicy.

SELECT JSON_REMOVE('[1, 2, 3]', '$[0]') AS 'Result';

Wynik:

+--------+
| Result |
+--------+
| [2, 3] |
+--------+

Tablice używają numeracji od zera, więc w tym przypadku pierwszy element jest usuwany z tablicy.

Oto kolejny przykład tablicy. Tym razem usuwamy wartość z zagnieżdżonej tablicy.

SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]') AS 'Result';

Wynik:

+----------------+
| Result         |
+----------------+
| [1, 2, [3, 5]] |
+----------------+

Przykład 4 – Wiele ścieżek

Możesz określić więcej niż jedną ścieżkę, aby usunąć dane z wielu miejsc w dokumencie JSON.

Podstawowy przykład:

SELECT JSON_REMOVE('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Result';

Wynik:

+-----------+
| Result    |
+-----------+
| [1, 3, 4] |
+-----------+

Jak wspomniano, path argumenty są oceniane od lewej do prawej, a dokument utworzony przez ocenę jednej ścieżki staje się nową wartością, względem której oceniana jest następna ścieżka.

Dlatego w tym przykładzie drugi argument ścieżki usuwa wartość inną niż ta, którą usunęłaby, gdyby był jedynym argumentem ścieżki. Gdyby był to jedyny argument ścieżki, usunąłby 4 .

Oto, co mam na myśli:

SELECT 
  JSON_REMOVE('[1, 2, 3, 4, 5]', '$[3]') AS 'One Path',
  JSON_REMOVE('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Two Paths';

Wynik:

+--------------+-----------+
| One Path     | Two Paths |
+--------------+-----------+
| [1, 2, 3, 5] | [1, 3, 4] |
+--------------+-----------+

Możesz to zobaczyć, gdy używamy $[3] jako jedyna ścieżka usuwa 4 z tablicy. Ale kiedy używamy go jako drugiej ścieżki, usuwa 5 (i 4 pozostaje nietknięty).

Inny przykład, tym razem usuwanie wartości z tablicy i tablicy zagnieżdżonej:

SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[0]', '$[1][1]') AS 'Result';

Wynik:

+-------------+
| Result      |
+-------------+
| [2, [3, 5]] |
+-------------+

Więc znowu, nawet jeśli tablica jest na pozycji 2 w oryginalnym dokumencie, pierwsza wartość ścieżki ($[0] ) odcina zewnętrzną tablicę, a wewnętrzna tablica zmienia się na pozycję 1 .

Jeśli to sprawia, że ​​kręci ci się głowa, zawsze możesz zamienić argumenty ścieżki, aby najpierw usunąć wartości z prawej strony. W ten sposób nie wpłynie to na pozycję wartości skrajnych po lewej stronie, dlatego możesz określić ścieżki na podstawie oryginalnego dokumentu JSON.

Możemy więc zmienić poprzedni kod na następujący i uzyskać ten sam wynik:

SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]', '$[0]') AS 'Result';

Wynik:

+-------------+
| Result      |
+-------------+
| [2, [3, 5]] |
+-------------+

Przykład 5 – Większy dokument JSON

Oto przykład z (nieco) większym dokumentem JSON.

SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Age": 39,
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }';
SELECT JSON_REMOVE(@data, '$.Person.Age', '$.Person.Hobbies[2]') AS 'Result';

Wynik:

+------------------------------------------------------------------+
| Result                                                           |
+------------------------------------------------------------------+
| {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping"]}} |
+------------------------------------------------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gdzie klauzula do filtrowania wierszy w MySQL

  2. Zarządzanie kontami użytkowników, role, uprawnienia, uwierzytelnianie PHP i MySQL - Część 4

  3. Używanie MySQL z Entity Framework

  4. PyInstaller, plik spec, ImportError:brak modułu o nazwie „blah”

  5. Jak zwrócić wyniki zapytania jako listę oddzieloną przecinkami w MySQL?