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

JSON_SET() – Vložení nebo aktualizace hodnot v dokumentu JSON v MySQL

V MySQL je to JSON_SET() funkce vloží nebo aktualizuje hodnoty v 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. Pokud potřebujete aktualizovat více hodnot, můžete zadat více párů cesta/hodnota.

Syntaxe

Syntaxe vypadá takto:

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

Kde:

  • json_doc je dokument JSON.
  • path je cesta prvku, pro který se mají vložit data nebo aktualizovat hodnotu na.
  • val je nová hodnota.

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

Pokud první argument není platným dokumentem JSON nebo pokud některý argument cesty není platný výraz cesty nebo obsahuje *, dojde k chybě. nebo ** zástupný znak.

Příklad 1 – Vložení hodnoty

Zde je příklad demonstrující, jak vložit hodnotu pomocí této funkce.

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

Výsledek:

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

V tomto případě je 3. argument vložen do pole na zadané cestě. 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_SET('{"Name":"Homer", "Gender":"Muž"}', '$.Age', 39) AS 'Result';

Výsledek:

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

Příklad 2 – Aktualizace hodnoty

Předchozí příklad vložil hodnotu. Tento příklad aktualizuje existující hodnotu.

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

Výsledek:

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

Zde je další příklad:

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

Výsledek:

+------------------------------------+| Výsledek |+------------------------------------+| {"Jméno":"Bart", "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_SET('[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, bude hodnota aktualizována:

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

Výsledek:

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

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

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

Výsledek:

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

Příklad 4 – Více hodnot

Můžete vložit/aktualizovat více hodnot najednou. Jednoduše přidejte každý pár klíč/hodnota oddělený čárkou. Příklad:

SELECT JSON_SET('{"a":1, "b":2, "c":3}', '$.a', 9, '$.c', 'Bart') AS 'Výsledek';

Výsledek:

+-------------------------------+| Výsledek |+-------------------------------+| {"a":9, "b":2, "c":"Bart"} |+--------------------------- ----+

Příklad 5 – 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_SET(@data, '$.Person. Jméno', 'Bart', '$.Person.Hobbies[1]', "Nešlechetnost") JAKO 'Výsledek';

Výsledek:

+---------------------------------------------- --------------------+| Výsledek |+----------------------------------------------- -------------------+| {"Osoba":{"Jméno":"Bart", "Hobby":["Jídlo", "Neplechy"]}} |+------------------- ----------------------------------------------+

Viz také JSON_INSERT() pro vkládání hodnot bez nahrazování existujících hodnot a JSON_REPLACE() pro nahrazení pouze existujících hodnot.


  1. Vlastní SERIAL / automatický přírůstek na skupinu hodnot

  2. Jak YEAR() funguje v MariaDB

  3. Maximální velikost pro dotaz SQL Server? klauzule IN? Existuje lepší přístup

  4. Jak mohu zkontrolovat typ motoru MySQL pro konkrétní tabulku?