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

JSON_ARRAY_APPEND() – Připojit hodnoty k poli JSON v MySQL

Při používání dokumentů JSON s MySQL můžete použít JSON_ARRAY_APPEND() funkce pro připojení nových hodnot k poli.

Funguje to tak, že jako první argument zadáte dokument JSON, poté následuje cesta, ke které se má připojit, následovaná hodnotou, kterou chcete připojit.

V MySQL 5.7 se tato funkce nazývala JSON_APPEND() ale tento název již není podporován.

Syntaxe

Syntaxe vypadá takto:

JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)

Kde:

  • json_doc je dokument JSON.
  • path je cesta prvku, ke kterému se má připojit nová hodnota.
  • val je nová hodnota, která bude připojena.

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.

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

Zde je příklad k demonstraci.

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

Výsledek:

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

Takže 3. argument je připojen k poli. V tomto případě používám $ pro cestu. Toto je synonymum pro dokument JSON, takže hodnota je připojena k poli nejvyšší úrovně (což je v tomto případě shodou okolností jediné pole).

Příklad 2 – vnořené pole

Zde je příklad připojení hodnoty k poli, které je vnořeno do jiného pole.

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

Výsledek:

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

Zde tedy používám $[2] jako cesta. Toto určuje pole na třetím prvku (pole používají číslování založené na nule, takže počet začíná od nuly).

Pokud u tohoto prvku ještě pole nebylo, vytvoří se pole nové.

Takhle:

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

Výsledek:

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

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

Tento příklad používá (trochu) větší dokument JSON. To ukazuje, jak se cesta mění v závislosti na tom, kde se pole v dokumentu nachází.

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

Výsledek:

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

A stejně jako v předchozím příkladu můžeme v případě potřeby vytvořit nové vnořené pole:

SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies[0]', "Drinking") AS 'Result';

Výsledek:

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


  1. Jiné než číselné znaky, které se vrátí jako kladné při použití ISNUMERIC() na serveru SQL Server

  2. Odstraňování problémů AlwaysOn – Někdy to vyžaduje mnoho pohledů

  3. Jak funguje funkce MAKE_SET() v MySQL

  4. Nelze nainstalovat pg gem v Mavericks s Postgres.app