sql >> Databáze >  >> RDS >> Mysql

JSON_REMOVE() – Odebrání dat z dokumentu JSON v MySQL

V MySQL je to JSON_REMOVE() funkce odstraní data z dokumentu JSON a vrátí výsledek.

Jako první argument zadáte dokument JSON a za ním cestu k odstranění dat. V případě potřeby můžete poskytnout více cest.

Syntaxe

Syntaxe vypadá takto:

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

Kde json_doc je dokument JSON a path je cesta k odstranění dat.

path argumenty se vyhodnocují zleva doprava. Dokument vytvořený vyhodnocením jedné cesty se stane novou hodnotou, podle které je vyhodnocena další cesta.

První argument musí být platný dokument JSON, jinak dojde k chybě.

Také path argument musí být platný výraz cesty a nemůže to být $ nebo obsahuje * nebo ** zástupný znak, jinak dojde k chybě.

Příklad 1 – Základní použití

Zde je příklad k demonstraci.

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

Výsledek:

+-------------------+| Výsledek |+------------------+| {"a":1, "c":3} |+------------------+

V tomto případě jsme odstranili pár klíč/hodnota s klíčem b . Je to proto, že jsme zadali $.b jako druhý argument.

Zde je další příklad:

SELECT JSON_REMOVE('{"Jméno":"Homer", "Gender":"Muž", "Věk":39}', '$.Věk') AS 'Výsledek';

Výsledek:

+-------------------------------------+| Výsledek |+-------------------------------------+| {"Jméno":"Homer", "Gender":"Muž"} |+------------------------------- ------+

Příklad 2 – Neexistující cesta

Pokud zadáte cestu, která neexistuje, nic se neodstraní. Původní dokument JSON je vrácen bez úprav.

SELECT JSON_REMOVE('{"Jméno":"Homer", "Věk":39}', '$.Gender') AS 'Výsledek';

Výsledek:

+------------------------------+| Výsledek |+------------------------------+| {"Věk":39, "Jméno":"Homer"} |+------------------------------+ 

Příklad 3 – Pole

Zde je příklad použití pole.

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

Výsledek:

+---------+| Výsledek |+--------+| [2, 3] |+--------+

Pole používají číslování založené na nule, takže v tomto případě je první prvek z pole odstraněn.

Zde je další příklad pole. Tentokrát odstraníme hodnotu z vnořeného pole.

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

Výsledek:

+-----------------+| Výsledek |+-----------------+| [1, 2, [3, 5]] |+-----------------+

Příklad 4 – Více cest

Můžete zadat více než jednu cestu k odstranění dat z více míst v dokumentu JSON.

Základní příklad:

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

Výsledek:

+------------+| Výsledek |+------------+| [1, 3, 4] |+------------+

Jak již bylo zmíněno, path argumenty se vyhodnocují zleva doprava a dokument vytvořený vyhodnocením jedné cesty se stane novou hodnotou, podle níž se vyhodnotí další cesta.

Proto v tomto příkladu argument 2. cesta odstraní jinou hodnotu, než jakou by odstranil, kdyby to byl jediný argument cesty. Pokud by to byl jediný argument cesty, odstranil by 4 .

Zde je to, co mám na mysli:

SELECT JSON_REMOVE('[1, 2, 3, 4, 5]', '$[3]') AS 'Jedna cesta', JSON_REMOVE('[1, 2, 3, 4, 5]', ' $[1]', '$[3]') JAKO 'Dvě cesty';

Výsledek:

+--------------+-----------+| Jedna cesta | Dvě cesty |+--------------+-----------+| [1, 2, 3, 5] | [1, 3, 4] |+--------------+-----------+

Takže to můžete vidět, když použijeme $[3] jako jediná cesta odstraní 4 z pole. Ale když jej použijeme jako 2. cestu, odstraní 5 (a 4 je ponecháno nedotčené).

Další příklad, tentokrát smazání hodnot z pole a vnořeného pole:

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

Výsledek:

+--------------+| Výsledek |+--------------+| [2, [3, 5]] |+--------------+

Takže znovu, i když je pole na pozici 2 v původním dokumentu hodnota první cesty ($[0] ) rozsekne vnější pole a vnitřní pole se změní na pozici 1 .

Pokud se vám z toho zatočí hlava, můžete vždy zaměnit argumenty cesty tak, aby byly nejprve odstraněny hodnoty nejvíce vpravo. Tímto způsobem to neovlivní polohu hodnot nejvíce vlevo, a proto můžete zadat cesty na základě původního dokumentu JSON.

Můžeme tedy změnit předchozí kód na následující a získat stejný výsledek:

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

Výsledek:

+--------------+| Výsledek |+--------------+| [2, [3, 5]] |+--------------+

Příklad 5 – Větší dokument JSON

Zde je příklad s (trochu) větším dokumentem JSON.

SET @data ='{ "Osoba":{ "Jméno":"Homer", "Věk":39, "Záliby":["Jídlo", "Spánek", "Base Jumping"] } }'; SELECT JSON_REMOVE(@data, '$.Person.Age', '$.Person.Hobbies[2]') AS 'Výsledek';

Výsledek:

+---------------------------------------------- ---------------------+| Výsledek |+----------------------------------------------- --------------------+| {"Osoba":{"Jméno":"Homer", "Hobby":["Jídlo", "Spánek"]}} |+------------------- -----------------------------------------------+ 
  1. Nejlepší funkce, které je třeba hledat v nástroji pro monitorování serveru SQL

  2. MySql Single Table, vyberte posledních 7 dní a zahrňte prázdné řádky

  3. Jak zlepšit výkon replikace v clusteru MySQL nebo MariaDB Galera

  4. Jak získat informace o typu definovaném uživatelem?