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

MariaDB JSON_INSERT() vysvětleno

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

Syntaxe

Syntaxe vypadá takto:

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

Kde json_doc je dokument JSON, path je cesta, kam mají být data vložena, a val je hodnota, která má být vložena do této cesty.

Příklad

Zde je příklad k demonstraci.

SET @json_document = '
    { 
        "name": "Wag"
    }
';
SELECT JSON_INSERT(@json_document, '$.type', "Dog");

Výsledek:

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

Zde jsem vložil "type": "Dog" do dokumentu.

V tomto případě jsem použil $.type jako cesta. Proto type je klíč a Dog je hodnota.

Když cesta již existuje

Předání cesty, která již v dokumentu JSON existuje, způsobí, že původní dokument bude vrácen beze změny.

Příklad:

SET @json_document = '
    { 
        "name": "Wag"
    }
';
SELECT JSON_INSERT(@json_document, '$.name', "Bark");

Výsledek:

+-----------------------------------------------+
| JSON_INSERT(@json_document, '$.name', "Bark") |
+-----------------------------------------------+
| {"name": "Wag"}                               |
+-----------------------------------------------+

Vkládání polí

Zde je příklad vložení pole do dokumentu JSON:

SET @json_document = '
    { 
        "name" : "Wag"
    }
';
SELECT JSON_INSERT(@json_document, '$.scores', '[ 8, 7, 9 ]');

Výsledek:

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

Připojování k polím

Zde je příklad použití JSON_INSERT() pro připojení dat k poli:

SET @json_document = '
    { 
        "_id" : 1, 
        "awards" : [ "Top Dog", "Best Dog" ] 
    }
';
SELECT JSON_INSERT(@json_document, '$.awards[2]', "Biggest Dog");

Výsledek:

+--------------------------------------------------------------+
| JSON_INSERT(@json_document, '$.awards[2]', "Biggest Dog")    |
+--------------------------------------------------------------+
| {"_id": 1, "awards": ["Top Dog", "Best Dog", "Biggest Dog"]} |
+--------------------------------------------------------------+

Ačkoli to pro tento příklad fungovalo dobře, mohlo to snadno selhat. Pokud se například pokusíme vložit hodnotu na jiné místo v poli, nefunguje to:

SET @json_document = '
    { 
        "_id" : 1, 
        "awards" : [ "Top Dog", "Best Dog" ] 
    }
';
SELECT JSON_INSERT(@json_document, '$.awards[1]', "Biggest Dog");

Výsledek:

+-----------------------------------------------------------+
| JSON_INSERT(@json_document, '$.awards[1]', "Biggest Dog") |
+-----------------------------------------------------------+
| {"_id": 1, "awards": ["Top Dog", "Best Dog"]}             |
+-----------------------------------------------------------+

Chcete-li vložit hodnoty do pole, použijte JSON_ARRAY_INSERT() místo toho funkci.

Také, ačkoli jsme byli schopni připojit hodnotu k poli ve výše uvedeném příkladu, pravděpodobně bude lepší použít JSON_ARRAY_APPEND() funkce, protože je navržen speciálně pro tento účel.

Vnořené objekty

Zde je příklad vložení hodnoty do objektu vnořeného do jiného objektu:

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog"
            }
        }
    }
';
SELECT JSON_INSERT(
    @json_document, 
    '$.details.awards.Sumo 2020',
    'Biggest Dog'
    );

Výsledek:

{"_id": 1, "name": "Wag", "details": {"type": "Dog", "weight": 20, "awards": {"Florida Dog Awards": "Top Dog", "New York Marathon": "Fastest Dog", "Sumo 2020": "Biggest Dog"}}}

Zkrášlení výsledku

Můžeme použít JSON_DETAILED() funkce, která usnadní čtení výsledku:

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog"
            }
        }
    }
';
SELECT 
    JSON_DETAILED(
        JSON_INSERT(
            @json_document, 
            '$.details.awards.Sumo 2020',
            'Biggest Dog'
        )
    );

Výsledek:

{
    "_id": 1,
    "name": "Wag",
    "details": 
    {
        "type": "Dog",
        "weight": 20,
        "awards": 
        {
            "Florida Dog Awards": "Top Dog",
            "New York Marathon": "Fastest Dog",
            "Sumo 2020": "Biggest Dog"
        }
    }
}

Nulové argumenty

Pokud některý z json_document nebo path argumenty jsou NULL , výsledkem je NULL :

SELECT 
    JSON_INSERT(null, '$.type', 'Dog'),
    JSON_INSERT('{"a":1}', null, 'Dog');

Výsledek:

+------------------------------------+-------------------------------------+
| JSON_INSERT(null, '$.type', 'Dog') | JSON_INSERT('{"a":1}', null, 'Dog') |
+------------------------------------+-------------------------------------+
| NULL                               | NULL                                |
+------------------------------------+-------------------------------------+

Pokud však value argument je NULL , klíč je přidán do zadané cesty s hodnotou null :

SELECT JSON_INSERT('{"a":1}', '$.type', null);

Výsledek:

+----------------------------------------+
| JSON_INSERT('{"a":1}', '$.type', null) |
+----------------------------------------+
| {"a": 1, "type": null}                 |
+----------------------------------------+

Nesprávný počet parametrů

Pokud neposkytnete žádné argumenty, dojde k chybě:

SELECT JSON_INSERT();

Výsledek:

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

Je to stejné, když poskytnete příliš málo nebo příliš mnoho argumentů:

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

Výsledek:

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

Podobné funkce

JSON_REPLACE() funkce může aktualizovat existující data.

JSON_SET() funkce může aktualizovat stávající data a vkládat nová data. Takže JSON_SET() je jako JSON_INSERT() a JSON_REPLACE() v jedné funkci.


  1. Rozdíl v MySQL JOIN a LEFT JOIN

  2. Vytvoření tabulky v SQL Server (T-SQL)

  3. Mohu parametrizovat název tabulky v připraveném příkazu?

  4. Oracle získá cizí klíče