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

JSON_INSERT() – Vložení hodnot do dokumentu JSON v MySQL

V MySQL je to JSON_INSERT() funkce vloží hodnotu do dokumentu JSON a vrátí výsledek.

Jako první argument zadáte dokument JSON, za ním následuje cesta, do které se má vložit, a za ním hodnota, kterou chcete vložit.

Syntaxe

Syntaxe vypadá takto:

JSON_INSERT(json_doc, cesta, hodnota[, cesta, hodnota] ...)

Kde:

  • json_doc je dokument JSON.
  • path je cesta prvku, pro který se má vložit nová hodnota.
  • val je nová hodnota, která bude vložena.

Páry cesta-hodnota se vyhodnocují zleva doprava. Dokument vytvořený vyhodnocením jednoho páru se stane novou hodnotou, podle které je vyhodnocen další pár.

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

Zde je příklad k demonstraci.

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

Výsledek:

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

Takže 3. argument je vložen do pole na zadané cestě. V tomto případě používám $.c pro cestu a 3 pro hodnotu, která se má vložit. Výsledkem je pár klíč/hodnota "c": 3 .

Zde je další příklad:

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

Výsledek:

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

Příklad 2 – Pokus o přepsání existující cesty

Pár cesta-hodnota pro existující cestu v dokumentu je ignorován a nepřepisuje stávající hodnotu dokumentu.

Pokud tedy upravíme předchozí příklad, abychom vložili hodnotu do Name (který již existuje), neproběhne žádné vložení:

SELECT JSON_INSERT('{"Jméno":"Homer", "Gender":"Muž"}', '$.Name', "Bart") JAKO 'Výsledek';

Výsledek:

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

Příklad 3 – Pole

Hodnoty můžete do pole vložit pomocí cesty za konec existujícího pole. Příklad:

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

Výsledek:

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

Pokud však použijete cestu, která již v poli existuje, pole zůstane nezměněno:

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

Výsledek:

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

Pokud existující hodnota není pole, je automaticky zabaleno jako pole a poté rozšířeno o novou hodnotu. Příklad:

SELECT JSON_INSERT('{"a":1, "b":2}', '$[2]', 3) AS 'Result';

Výsledek:

+-----------------------+| Výsledek |+-----------------------+| [{"a":1, "b":2}, 3] |+-----------------------+

Ale znovu, pokud se pokusíte vložit hodnotu do cesty, která již existuje, dokument JSON zůstane nezměněn:

SELECT JSON_INSERT('{"a":1, "b":2}', '$[0]', 3) AS 'Result';

Výsledek:

+-------------------+| Výsledek |+------------------+| {"a":1, "b":2} |+------------------+

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

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

SET @data ='{ "Osoba":{ "Jméno":"Homer", "Hobby":["Jídlo", "Spánek"] } }';SELECT JSON_INSERT(@data, '$.Person. Hobbies[2]', "Base Jumping") JAKO 'Výsledek';

Výsledek:

+---------------------------------------------- ------------------------------------+| Výsledek |+----------------------------------------------- -----------------------------------+| {"Osoba":{"Jméno":"Homer", "Hobby":["Jídlo", "Spánek", "Base Jumping"]}} |+--------------- -------------------------------------------------- ------------------+

Viz také JSON_ARRAY_INSERT() a JSON_ARRAY_APPEND() pokud potřebujete vložit nebo připojit data do pole JSON.


  1. Jak provedu databázové transakce s psycopg2/python db api?

  2. ClusterControl - Pokročilá správa zálohování - mariabackup Část III

  3. CX_Oracle - import dat z Oracle do datového rámce Pandas

  4. Dopad události query_post_execution_showplan Extended v SQL Server 2012