I MariaDB, JSON_ARRAY_APPEND()
är en inbyggd funktion som lägger till värden i slutet av den eller de angivna arrayerna i ett JSON-dokument och returnerar resultatet.
Syntax
Syntaxen ser ut så här:
JSON_ARRAY_APPEND(json_doc, path, value[, path, value] ...)
Där json_doc
är JSON-dokumentet, path
är sökvägen dit du vill lägga till värdet/värdena och value
är värdet som ska läggas till.
Exempel
Här är ett exempel för att demonstrera funktionen.
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$', 4);
Resultat:
+--------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$', 4) | +--------------------------------------+ | [0, 1, 2, 3, 4] | +--------------------------------------+
I det här fallet är värdet 4
lades till i slutet av arrayen.
Lägg till flera värden
Du kan lägga till flera värden inom ett enda anrop till JSON_ARRAY_APPEND()
.
Exempel:
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$', 4, '$', 5);
Resultat:
+----------------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$', 4, '$', 5) | +----------------------------------------------+ | [0, 1, 2, 3, 4, 5] | +----------------------------------------------+
Flera matriser
Du kan lägga till värden till mer än en array inom samma anrop till JSON_ARRAY_APPEND()
.
Exempel:
SET @json_doc = '{"a": [0, 1], "b": [2, 3]}';
SELECT JSON_ARRAY_APPEND(@json_doc, '$.a', 4, '$.b', 5);
Resultat:
+--------------------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$.a', 4, '$.b', 5) | +--------------------------------------------------+ | {"a": [0, 1, 4], "b": [2, 3, 5]} | +--------------------------------------------------+
Inkapslade arrayer
Här är ett exempel på hur du lägger till ett värde till en kapslad array:
SET @json_doc = '[0, 1, [2, 3]]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$[2]', 4);
Resultat:
+-----------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$[2]', 4) | +-----------------------------------------+ | [0, 1, [2, 3, 4]] | +-----------------------------------------+
Och i följande exempel innehåller det ursprungliga JSON-dokumentet inte en kapslad array, utan JSON_ARRAY_APPEND()
skapar en kapslad array baserat på vår sökväg:
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$[3]', 4);
Resultat:
+-----------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$[3]', 4) | +-----------------------------------------+ | [0, 1, 2, [3, 4]] | +-----------------------------------------+
Större JSON-dokument
Här är ett exempel med ett lite större JSON-dokument.
Jag använder också JSON_DETAILED()
för att försköna resultatet:
SET @json_doc = '{
"pet": {
"name": "Fluffy",
"diet": ["Fish", "Chicken"]
}
}';
SELECT JSON_DETAILED(
JSON_ARRAY_APPEND(
@json_doc,
'$.pet.diet',
'Water')
);
Resultat:
{ "pet": { "name": "Fluffy", "diet": [ "Fish", "Chicken", "Water" ] } }
Och här är en som skapar en kapslad array:
SET @json_doc = '{
"pet": {
"name": "Scratch",
"diet": ["Beef", "Water"]
}
}';
SELECT JSON_DETAILED(
JSON_ARRAY_APPEND(
@json_doc,
'$.pet.diet[1]',
'Beer')
);
Resultat:
{ "pet": { "name": "Scratch", "diet": [ "Beef", [ "Water", "Beer" ] ] } }
Nollargument
Om det första argumentet är NULL
, resultatet är NULL
:
SELECT JSON_ARRAY_APPEND(null, '$', 4);
Resultat:
+---------------------------------+ | JSON_ARRAY_APPEND(null, '$', 4) | +---------------------------------+ | NULL | +---------------------------------+
Detsamma gäller för path
argument:
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, null, 4);
Resultat:
+---------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, null, 4) | +---------------------------------------+ | NULL | +---------------------------------------+
Men om value
argumentet är NULL
, sedan NULL
läggs till i arrayen:
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$', null);
Resultat:
+-----------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$', null) | +-----------------------------------------+ | [0, 1, 2, 3, null] | +-----------------------------------------+
Du kan också använda JSON_ARRAY_INSERT()
för att infoga värden i en array.