I MariaDB, JSON_INSERT() er en indbygget funktion, der indsætter data i et JSON-dokument, og returnerer resultatet.
Syntaks
Syntaksen ser sådan ud:
JSON_INSERT(json_doc, path, val[, path, val] ...)
Hvor json_doc er JSON-dokumentet, path er stien til hvor dataene skal indsættes, og val er den værdi, der skal indsættes på den sti.
Eksempel
Her er et eksempel til at demonstrere.
SET @json_document = '
{
"name": "Wag"
}
';
SELECT JSON_INSERT(@json_document, '$.type', "Dog"); Resultat:
+----------------------------------------------+
| JSON_INSERT(@json_document, '$.type', "Dog") |
+----------------------------------------------+
| {"name": "Wag", "type": "Dog"} |
+----------------------------------------------+
Her indsatte jeg "type": "Dog" ind i dokumentet.
I dette tilfælde brugte jeg $.type som stien. Derfor type er nøglen og Dog er værdien.
Når stien allerede eksisterer
Passering af en sti, der allerede findes i JSON-dokumentet, resulterer i, at det originale dokument returneres uændret.
Eksempel:
SET @json_document = '
{
"name": "Wag"
}
';
SELECT JSON_INSERT(@json_document, '$.name', "Bark"); Resultat:
+-----------------------------------------------+
| JSON_INSERT(@json_document, '$.name', "Bark") |
+-----------------------------------------------+
| {"name": "Wag"} |
+-----------------------------------------------+ Indsættelse af arrays
Her er et eksempel på indsættelse af et array i et JSON-dokument:
SET @json_document = '
{
"name" : "Wag"
}
';
SELECT JSON_INSERT(@json_document, '$.scores', '[ 8, 7, 9 ]'); Resultat:
+--------------------------------------------------------+
| JSON_INSERT(@json_document, '$.scores', '[ 8, 7, 9 ]') |
+--------------------------------------------------------+
| {"name": "Wag", "scores": "[ 8, 7, 9 ]"} |
+--------------------------------------------------------+ Tilføjelse til arrays
Her er et eksempel på brug af JSON_INSERT() for at tilføje data til et array:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog" ]
}
';
SELECT JSON_INSERT(@json_document, '$.awards[2]', "Biggest Dog"); Resultat:
+--------------------------------------------------------------+
| JSON_INSERT(@json_document, '$.awards[2]', "Biggest Dog") |
+--------------------------------------------------------------+
| {"_id": 1, "awards": ["Top Dog", "Best Dog", "Biggest Dog"]} |
+--------------------------------------------------------------+ Men selvom det fungerede fint for dette eksempel, kunne det nemt have mislykkedes. For eksempel, hvis vi forsøger at indsætte værdien et andet sted i arrayet, virker det ikke:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog" ]
}
';
SELECT JSON_INSERT(@json_document, '$.awards[1]', "Biggest Dog"); Resultat:
+-----------------------------------------------------------+
| JSON_INSERT(@json_document, '$.awards[1]', "Biggest Dog") |
+-----------------------------------------------------------+
| {"_id": 1, "awards": ["Top Dog", "Best Dog"]} |
+-----------------------------------------------------------+
For at indsætte værdier i et array skal du bruge JSON_ARRAY_INSERT() funktion i stedet for.
Selvom vi var i stand til at tilføje en værdi til en matrix i ovenstående eksempel, er du sandsynligvis bedre stillet ved at bruge JSON_ARRAY_APPEND() funktion, da den er designet specifikt til det formål.
Indlejrede objekter
Her er et eksempel på indsættelse af en værdi i et objekt indlejret i et andet objekt:
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'
); Resultat:
{"_id": 1, "name": "Wag", "details": {"type": "Dog", "weight": 20, "awards": {"Florida Dog Awards": "Top Dog", "New York Marathon": "Fastest Dog", "Sumo 2020": "Biggest Dog"}}} Fremstil resultatet
Vi kan bruge JSON_DETAILED() funktion for at gøre resultatet nemmere at læse:
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'
)
); Resultat:
{
"_id": 1,
"name": "Wag",
"details":
{
"type": "Dog",
"weight": 20,
"awards":
{
"Florida Dog Awards": "Top Dog",
"New York Marathon": "Fastest Dog",
"Sumo 2020": "Biggest Dog"
}
}
} Nul-argumenter
Hvis en af json_document eller path argumenter er NULL , resultatet er NULL :
SELECT
JSON_INSERT(null, '$.type', 'Dog'),
JSON_INSERT('{"a":1}', null, 'Dog'); Resultat:
+------------------------------------+-------------------------------------+
| JSON_INSERT(null, '$.type', 'Dog') | JSON_INSERT('{"a":1}', null, 'Dog') |
+------------------------------------+-------------------------------------+
| NULL | NULL |
+------------------------------------+-------------------------------------+
Men hvis value argumentet er NULL , tilføjes nøglen ved den angivne sti med værdien null :
SELECT JSON_INSERT('{"a":1}', '$.type', null); Resultat:
+----------------------------------------+
| JSON_INSERT('{"a":1}', '$.type', null) |
+----------------------------------------+
| {"a": 1, "type": null} |
+----------------------------------------+ Forkert parameterantal
Angivelse af ingen argumenter resulterer i en fejl:
SELECT JSON_INSERT(); Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_INSERT'
Det er det samme, når du giver for få eller for mange argumenter:
SELECT JSON_INSERT('{ "a": 1}'); Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_INSERT'
Lignende funktioner
JSON_REPLACE() funktion kan opdatere eksisterende data.
JSON_SET() funktion kan opdatere eksisterende data og indsætte nye data. Så JSON_SET() er ligesom JSON_INSERT() og JSON_REPLACE() i én funktion.