Trong MariaDB, JSON_ARRAY_INSERT()
là một hàm tích hợp để chèn một giá trị vào tài liệu JSON và trả về kết quả.
Cú pháp
Cú pháp như sau:
JSON_ARRAY_INSERT(json_doc, path, value[, path, value] ...)
Ở đâu json_doc
là tài liệu JSON, path
là đường dẫn đến nơi bạn muốn chèn giá trị / s và value
là giá trị để chèn.
Ví dụ
Đây là một ví dụ để chứng minh.
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3);
Kết quả:
+ ------------------------------------------- + | JSON_ARRAY_INSERT ('[0, 1, 2]', '$ [1]', 3) | + --------------------------- ---------------- + | [0, 3, 1, 2] | + --------------------------------------- ---- +
Trong trường hợp này, giá trị 3
đã được chèn vào mảng ở vị trí 1
. Mảng dựa trên 0, vì vậy nó trở thành phần tử thứ hai trong mảng.
Chèn nhiều giá trị
Bạn có thể chèn nhiều giá trị trong một lệnh gọi tới JSON_ARRAY_INSERT()
.
Ví dụ:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[0]', 4, '$[2]', 5);
Kết quả:
+ ---------------------------------------------- -------- + | JSON_ARRAY_INSERT ('[0, 1, 2]', '$ [0]', 4, '$ [2]', 5) | + ------------------ ------------------------------------ + | [4, 0, 5, 1, 2] | + ------------------------------------- ----------------- +
Đánh giá được thực hiện từ trái sang phải.
Đây là những gì sẽ xảy ra nếu chúng tôi chuyển đổi path
/ value
đối số xung quanh:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[2]', 5, '$[0]', 4);
Kết quả:
+ ---------------------------------------------- -------- + | JSON_ARRAY_INSERT ('[0, 1, 2]', '$ [2]', 5, '$ [0]', 4) | + ------------------ ------------------------------------ + | [4, 0, 1, 5, 2] | + ------------------------------------- ----------------- +
Nhiều mảng
Bạn có thể chèn các giá trị vào nhiều mảng trong cùng một lệnh gọi tới JSON_ARRAY_INSERT()
.
Ví dụ:
SET @json_doc = '{"a": [0, 1], "b": [2, 3]}';
SELECT JSON_ARRAY_INSERT(@json_doc, '$.a[1]', 4, '$.b[2]', 5);
Kết quả:
+ ---------------------------------------------- ---------- + | JSON_ARRAY_INSERT (@json_doc, '$ .a [1]', 4, '$ .b [2]', 5) | + --------------------- ----------------------------------- + | {"a":[0, 4, 1], "b":[2, 3, 5]} | + ----------------------- --------------------------------- +
Mảng lồng nhau
Dưới đây là một ví dụ về việc chèn một giá trị vào một mảng lồng nhau:
SET @json_doc = '[0, 1, [2, 3]]';
SELECT JSON_ARRAY_INSERT(@json_doc, '$[2][1]', 4);
Kết quả:
+ -------------------------------------------- + | JSON_ARRAY_INSERT (@json_doc, '$ [2] [1]', 4) | + ------------------------------- ------------- + | [0, 1, [2, 4, 3]] | + ----------------------------------- --------- +
Tài liệu JSON lớn hơn
Đây là một ví dụ với tài liệu JSON lớn hơn một chút.
Tôi cũng sử dụng JSON_DETAILED()
để kiểm tra kết quả:
SET @json_doc = '{
"pet": {
"name": "Fluffy",
"diet": ["Fish", "Water"]
}
}';
SELECT JSON_DETAILED(
JSON_ARRAY_INSERT(
@json_doc,
'$.pet.diet[1]',
'Chicken')
);
Kết quả:
{"pet":{"name":"Fluffy", "diet":["Fish", "Chicken", "Water"]}}
Đối số rỗng
Nếu đối số đầu tiên là NULL
, kết quả là NULL
:
SELECT JSON_ARRAY_INSERT(null, '$[1]', 4);
Kết quả:
+ ------------------------------------ + | JSON_ARRAY_INSERT (null, '$ [1]', 4) | + ----------------------------------- - + | NULL | + ------------------------------------ +
Điều tương tự cũng áp dụng cho path
đối số:
SELECT JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4);
Kết quả:
+ -------------------------------------------- + | JSON_ARRAY_INSERT ('[0, 1, 2, 3]', null, 4) | + ------------------------------ -------------- + | NULL | + -------------------------------------------- +Tuy nhiên, nếu giá trị
value
đối số làNULL
, rồi đếnNULL
được chèn vào mảng:SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null);
Kết quả:
+ ---------------------------------------------- + | JSON_ARRAY_INSERT ('[0, 1, 2]', '$ [1]', null) | + --------------------------- ------------------- + | [0, null, 1, 2] | + --------------------------------------- ------- +Bạn cũng có thể sử dụng
JSON_ARRAY_APPEND()
để nối các giá trị vào một mảng.