MySQL JSON_ARRAY_APPEND() Function
In MySQL, the JSON_ARRAY_APPEND() function appends a value to a array in a JSON document, specified by a path, and returns the modified JSON document.
JSON_ARRAY_APPEND() Syntax
Here is the syntax of the MySQL JSON_ARRAY_APPEND() function:
JSON_ARRAY_APPEND(json, path, value[, path2, value2] ...)
Parameters
json- Required. The JSON document that will be modified.
path- Required. The path expression that points to an array. A valid path expression cannot contain
*or**. value- Required. The value to be appended to an array specified by the path.
Return value
The JSON_ARRAY_APPEND() function is used to modify the JSON document. It appends an element to the specified array and returns the modified JSON document.
- If the node indicated by the path expression is not an array, the
JSON_ARRAY_APPEND()function will use the value of this node as the first element of the array and append the value to the end of the array. - This function will return
NULLif the JSON document or path isNULL.
There will happen an error in the following cases:
- MySQL will give an error if the parameter
jsonis not a valid JSON document. You can useJSON_VALID()to verify the JSON document. - If the parameter
pathis not a valid path expression or contains*or**, MySQL will give an error.
JSON_ARRAY_APPEND() Examples
Here are some examples of JSON_ARRAY_APPEND().
Append a value to an array
SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$', 4);
+----------------------------------------+
| JSON_ARRAY_APPEND('[1, 2, 3]', '$', 4) |
+----------------------------------------+
| [1, 2, 3, 4] |
+----------------------------------------+Here, the path expression $ represents the JSON document [1, 2, 3].
Append a value to an nested array
SELECT JSON_ARRAY_APPEND('[1, [2, 3]]', '$[1]', 4);
+---------------------------------------------+
| JSON_ARRAY_APPEND('[1, [2, 3]]', '$[1]', 4) |
+---------------------------------------------+
| [1, [2, 3, 4]] |
+---------------------------------------------+Here, the path expression $[1] represents the second element of the array [1, [2, 3]], that is [2, 3].
Append a value to an array in an object
SELECT JSON_ARRAY_APPEND('{"name": "Tim", "hobby": ["car"]}', '$.hobby', "food");
+---------------------------------------------------------------------------+
| JSON_ARRAY_APPEND('{"name": "Tim", "hobby": ["car"]}', '$.hobby', "food") |
+---------------------------------------------------------------------------+
| {"name": "Tim", "hobby": ["car", "food"]} |
+---------------------------------------------------------------------------+Here, the path expression $.hobby represents the member of the JSON object, that is "hobby": ["car"]. So, the value "food" was appended to ["car"].
Append a value to non-array
SELECT JSON_ARRAY_APPEND('1', '$', 2);
+--------------------------------+
| JSON_ARRAY_APPEND('1', '$', 2) |
+--------------------------------+
| [1, 2] |
+--------------------------------+Here, the path expression $ represents 1 that is not a JSON array. So JSON_ARRAY_APPEND() wrapped 1 to an array [1]. Then, append 2 to [1] and the array is [1, 2].
You can also append values to non-array elements in an array, for example:
SELECT JSON_ARRAY_APPEND('[1, 2]', '$[1]', 3);
+----------------------------------------+
| JSON_ARRAY_APPEND('[1, 2]', '$[1]', 3) |
+----------------------------------------+
| [1, [2, 3]] |
+----------------------------------------+You can also append values to non-array members in an object, for example:
SELECT JSON_ARRAY_APPEND('{"name": "Tim", "hobby": "car"}', '$.hobby', "food");
+-------------------------------------------------------------------------+
| JSON_ARRAY_APPEND('{"name": "Tim", "hobby": "car"}', '$.hobby', "food") |
+-------------------------------------------------------------------------+
| {"name": "Tim", "hobby": ["car", "food"]} |
+-------------------------------------------------------------------------+