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.