sql >> Databáze >  >> RDS >> MariaDB

MariaDB JSON_SET() Vysvětleno

V MariaDB, JSON_SET() je vestavěná funkce, která aktualizuje nebo vkládá data do dokumentu JSON a vrací výsledek.

JSON_SET() může aktualizovat a vkládat data, zatímco JSON_INSERT() může vkládat pouze data a JSON_REPLACE() může pouze aktualizovat data.

Syntaxe

Syntaxe vypadá takto:

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

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říklad

Zde je příklad k demonstraci.

SET @json = '
    { 
        "name" : "Wag", 
        "type" : "Cat" 
    }
';

SELECT JSON_SET(@json, '$.type', 'Dog');

Výsledek:

+----------------------------------+
| JSON_SET(@json, '$.type', 'Dog') |
+----------------------------------+
| {"name": "Wag", "type": "Dog"}   |
+----------------------------------+

V tomto případě jsem aktualizoval hodnotu type člen Cat na Dog .

Prvky pole

Chcete-li aktualizovat nebo vložit prvek pole, zadejte index prvku:

SET @json = '
    { 
        "name" : "Wag", 
        "scores" : [8, 0, 9] 
    }
';

SELECT JSON_SET(@json, '$.scores[1]', 7);

Výsledek:

+--------------------------------------+
| JSON_SET(@json, '$.scores[1]', 7)    |
+--------------------------------------+
| {"name": "Wag", "scores": [8, 7, 9]} |
+--------------------------------------+

V tomto případě byl druhý prvek pole aktualizován novou hodnotou. Pole jsou založeny na nule, takže $.scores[1] odkazuje na druhý prvek v poli.

Vložit data

Předchozí příklady aktualizovaly stávající data. Zde je příklad vkládání nových dat:

SET @json = '
    { 
        "name" : "Wag", 
        "type" : "Dog" 
    }
';

SELECT JSON_SET(@json, '$.weight', 10);

Výsledek:

+----------------------------------------------+
| JSON_SET(@json, '$.weight', 10)              |
+----------------------------------------------+
| {"name": "Wag", "type": "Dog", "weight": 10} |
+----------------------------------------------+

Zde jsme vložili nový pár klíč/hodnota ("weight": 10 ).

Níže je uveden příklad přidání nového prvku do pole:

SET @json = '
    { 
        "name" : "Wag", 
        "scores" : [8, 0, 9] 
    }
';

SELECT JSON_SET(@json, '$.scores[3]', 7);

Výsledek:

+-----------------------------------------+
| JSON_SET(@json, '$.scores[3]', 7)       |
+-----------------------------------------+
| {"name": "Wag", "scores": [8, 0, 9, 7]} |
+-----------------------------------------+

Tento příklad pole lze také provést pomocí JSON_ARRAY_INSERT() nebo JSON_ARRAY_APPEND() .

Více cest

Syntaxe umožňuje nastavení/aktualizaci hodnot na více cestách jediným voláním JSON_SET() .

Příklad:

SET @json = '
    { 
        "name" : "Scratch", 
        "type" : "Rat"
    }
';

SELECT JSON_SET(@json, '$.type', 'Cat', '$.weight', 10);

Výsledek:

+--------------------------------------------------+
| JSON_SET(@json, '$.type', 'Cat', '$.weight', 10) |
+--------------------------------------------------+
| {"name": "Scratch", "type": "Cat", "weight": 10} |
+--------------------------------------------------+

V dalším příkladu vložíme novou hodnotu do pole a aktualizujeme další:

SET @json = '{ "scores" : [ 0, 1, 2 ] }';

SELECT 
    JSON_SET(
        @json, 
        '$.scores[1]', "a", 
        '$.scores[3]', "b"
    ) AS Result;

Výsledek:

+------------------------------+
| Result                       |
+------------------------------+
| {"scores": [0, "a", 2, "b"]} |
+------------------------------+

Nulové argumenty

Pokud json_doc nebo kteroukoli z path arguments je null , výsledkem je NULL . Ale pokud value argument je null , pak je hodnota nahrazena null .

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

Výsledek:

+------+------+-------------+
| a    | b    | c           |
+------+------+-------------+
| NULL | NULL | {"a": null} |
+------+------+-------------+

V následujícím příkladu chybí jeden z argumentů cesty v každém volání JSON_SET() . V obou případech je výsledkem NULL :

SET @json = '
    { 
        "name" : "Wag", 
        "type" : "Cat" 
    }
';

SELECT 
    JSON_SET(@json, null, 'Bark', '$.type', 'Dog') AS a,
    JSON_SET(@json, '$.name', 'Bark', null, 'Dog') AS b;

Výsledek:

+------+------+
| a    | b    |
+------+------+
| NULL | NULL |
+------+------+

Nesprávný počet parametrů

Volání JSON_SET() bez argumentu vede k chybě:

SELECT JSON_SET();

Výsledek:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_SET'

Je to stejné, když není předán dostatek argumentů:

SELECT JSON_SET('{"a":1}');

Výsledek:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_SET'

  1. SQL Server 2016:Vždy šifrováno

  2. Klonování databází pomocí PSDatabaseClone

  3. MySQL Jak vložíte INSERT DO tabulky s poddotazem SELECT vracejícím více řádků?

  4. převést řetězec data na pole datetime mysql