In MariaDB, JSON_INSERT()
is een ingebouwde functie die gegevens invoegt in een JSON-document en het resultaat retourneert.
Syntaxis
De syntaxis gaat als volgt:
JSON_INSERT(json_doc, path, val[, path, val] ...)
Waar json_doc
is het JSON-document, path
is het pad waar de gegevens moeten worden ingevoegd, en val
is de waarde die op dat pad moet worden ingevoegd.
Voorbeeld
Hier is een voorbeeld om te demonstreren.
SET @json_document = '
{
"name": "Wag"
}
';
SELECT JSON_INSERT(@json_document, '$.type', "Dog");
Resultaat:
+----------------------------------------------+ | JSON_INSERT(@json_document, '$.type', "Dog") | +----------------------------------------------+ | {"name": "Wag", "type": "Dog"} | +----------------------------------------------+
Hier heb ik "type": "Dog"
in het document.
In dit geval gebruikte ik $.type
als het pad. Daarom type
is de sleutel en Dog
is de waarde.
Als het pad al bestaat
Als u een pad doorgeeft dat al bestaat in het JSON-document, wordt het oorspronkelijke document ongewijzigd geretourneerd.
Voorbeeld:
SET @json_document = '
{
"name": "Wag"
}
';
SELECT JSON_INSERT(@json_document, '$.name', "Bark");
Resultaat:
+-----------------------------------------------+ | JSON_INSERT(@json_document, '$.name', "Bark") | +-----------------------------------------------+ | {"name": "Wag"} | +-----------------------------------------------+
Arrays invoegen
Hier is een voorbeeld van het invoegen van een array in een JSON-document:
SET @json_document = '
{
"name" : "Wag"
}
';
SELECT JSON_INSERT(@json_document, '$.scores', '[ 8, 7, 9 ]');
Resultaat:
+--------------------------------------------------------+ | JSON_INSERT(@json_document, '$.scores', '[ 8, 7, 9 ]') | +--------------------------------------------------------+ | {"name": "Wag", "scores": "[ 8, 7, 9 ]"} | +--------------------------------------------------------+
Toevoegen aan arrays
Hier is een voorbeeld van het gebruik van JSON_INSERT()
om gegevens aan een array toe te voegen:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog" ]
}
';
SELECT JSON_INSERT(@json_document, '$.awards[2]', "Biggest Dog");
Resultaat:
+--------------------------------------------------------------+ | JSON_INSERT(@json_document, '$.awards[2]', "Biggest Dog") | +--------------------------------------------------------------+ | {"_id": 1, "awards": ["Top Dog", "Best Dog", "Biggest Dog"]} | +--------------------------------------------------------------+
Hoewel het voor dit voorbeeld prima werkte, had het gemakkelijk kunnen mislukken. Als we bijvoorbeeld proberen de waarde op een andere plaats in de array in te voegen, werkt het niet:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog" ]
}
';
SELECT JSON_INSERT(@json_document, '$.awards[1]', "Biggest Dog");
Resultaat:
+-----------------------------------------------------------+ | JSON_INSERT(@json_document, '$.awards[1]', "Biggest Dog") | +-----------------------------------------------------------+ | {"_id": 1, "awards": ["Top Dog", "Best Dog"]} | +-----------------------------------------------------------+
Om waarden in een array in te voegen, gebruikt u de JSON_ARRAY_INSERT()
in plaats daarvan functioneren.
Hoewel we in het bovenstaande voorbeeld een waarde aan een array hebben kunnen toevoegen, kunt u waarschijnlijk beter de JSON_ARRAY_APPEND()
gebruiken functie, omdat het speciaal voor dat doel is ontworpen.
geneste objecten
Hier is een voorbeeld van het invoegen van een waarde in een object dat in een ander object is genest:
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'
);
Resultaat:
{"_id": 1, "name": "Wag", "details": {"type": "Dog", "weight": 20, "awards": {"Florida Dog Awards": "Top Dog", "New York Marathon": "Fastest Dog", "Sumo 2020": "Biggest Dog"}}}
Maak het resultaat mooier
We kunnen de JSON_DETAILED()
. gebruiken functie om het resultaat beter leesbaar te maken:
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'
)
);
Resultaat:
{ "_id": 1, "name": "Wag", "details": { "type": "Dog", "weight": 20, "awards": { "Florida Dog Awards": "Top Dog", "New York Marathon": "Fastest Dog", "Sumo 2020": "Biggest Dog" } } }
Nullargumenten
Als een van de json_document
of path
argumenten zijn NULL
, het resultaat is NULL
:
SELECT
JSON_INSERT(null, '$.type', 'Dog'),
JSON_INSERT('{"a":1}', null, 'Dog');
Resultaat:
+------------------------------------+-------------------------------------+ | JSON_INSERT(null, '$.type', 'Dog') | JSON_INSERT('{"a":1}', null, 'Dog') | +------------------------------------+-------------------------------------+ | NULL | NULL | +------------------------------------+-------------------------------------+
Als de value
argument is NULL
, de sleutel wordt toegevoegd op het opgegeven pad, met een waarde van null
:
SELECT JSON_INSERT('{"a":1}', '$.type', null);
Resultaat:
+----------------------------------------+ | JSON_INSERT('{"a":1}', '$.type', null) | +----------------------------------------+ | {"a": 1, "type": null} | +----------------------------------------+
Onjuist aantal parameters
Het verstrekken van geen argumenten resulteert in een fout:
SELECT JSON_INSERT();
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_INSERT'
Hetzelfde geldt wanneer u te weinig of te veel argumenten geeft:
SELECT JSON_INSERT('{ "a": 1}');
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_INSERT'
Vergelijkbare functies
De JSON_REPLACE()
functie kan bestaande gegevens bijwerken.
De JSON_SET()
functie kan bestaande gegevens bijwerken en nieuwe gegevens invoegen. Dus JSON_SET()
is als JSON_INSERT()
en JSON_REPLACE()
in één functie.