Trong MariaDB, JSON_ARRAY_APPEND() là một hàm tích hợp sẵn để nối các giá trị vào cuối của mảng / s được chỉ định trong tài liệu JSON và trả về kết quả.
Cú pháp
Cú pháp như sau:
JSON_ARRAY_APPEND(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 nối giá trị / s và value là giá trị để nối thêm.
Ví dụ
Đây là một ví dụ để chứng minh chức năng.
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$', 4); Kết quả:
+--------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$', 4) | +--------------------------------------+ | [0, 1, 2, 3, 4] | +--------------------------------------+
Trong trường hợp này, giá trị 4 đã được thêm vào cuối mảng.
Nối nhiều giá trị
Bạn có thể nối nhiều giá trị trong một lệnh gọi tới JSON_ARRAY_APPEND() .
Ví dụ:
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$', 4, '$', 5); Kết quả:
+----------------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$', 4, '$', 5) | +----------------------------------------------+ | [0, 1, 2, 3, 4, 5] | +----------------------------------------------+
Nhiều mảng
Bạn có thể nối các giá trị vào nhiều mảng trong cùng một lệnh gọi tới JSON_ARRAY_APPEND() .
Ví dụ:
SET @json_doc = '{"a": [0, 1], "b": [2, 3]}';
SELECT JSON_ARRAY_APPEND(@json_doc, '$.a', 4, '$.b', 5); Kết quả:
+--------------------------------------------------+
| JSON_ARRAY_APPEND(@json_doc, '$.a', 4, '$.b', 5) |
+--------------------------------------------------+
| {"a": [0, 1, 4], "b": [2, 3, 5]} |
+--------------------------------------------------+ Mảng lồng nhau
Dưới đây là một ví dụ về việc thêm một giá trị vào một mảng lồng nhau:
SET @json_doc = '[0, 1, [2, 3]]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$[2]', 4); Kết quả:
+-----------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$[2]', 4) | +-----------------------------------------+ | [0, 1, [2, 3, 4]] | +-----------------------------------------+
Và trong ví dụ sau, tài liệu JSON gốc không chứa một mảng lồng nhau mà là JSON_ARRAY_APPEND() tạo một mảng lồng nhau dựa trên đường dẫn của chúng tôi:
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$[3]', 4); Kết quả:
+-----------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$[3]', 4) | +-----------------------------------------+ | [0, 1, 2, [3, 4]] | +-----------------------------------------+
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", "Chicken"]
}
}';
SELECT JSON_DETAILED(
JSON_ARRAY_APPEND(
@json_doc,
'$.pet.diet',
'Water')
); Kết quả:
{
"pet":
{
"name": "Fluffy",
"diet":
[
"Fish",
"Chicken",
"Water"
]
}
} Và đây là cách tạo một mảng lồng nhau:
SET @json_doc = '{
"pet": {
"name": "Scratch",
"diet": ["Beef", "Water"]
}
}';
SELECT JSON_DETAILED(
JSON_ARRAY_APPEND(
@json_doc,
'$.pet.diet[1]',
'Beer')
); Kết quả:
{
"pet":
{
"name": "Scratch",
"diet":
[
"Beef",
[
"Water",
"Beer"
]
]
}
} Đối số rỗng
Nếu đối số đầu tiên là NULL , kết quả là NULL :
SELECT JSON_ARRAY_APPEND(null, '$', 4); Kết quả:
+---------------------------------+ | JSON_ARRAY_APPEND(null, '$', 4) | +---------------------------------+ | NULL | +---------------------------------+
Điều tương tự cũng áp dụng cho path đối số:
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, null, 4); Kết quả:
+---------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, null, 4) | +---------------------------------------+ | NULL | +---------------------------------------+
Tuy nhiên, nếu giá trị value đối số là NULL , rồi đến NULL được nối vào mảng:
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$', null); Kết quả:
+-----------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$', null) | +-----------------------------------------+ | [0, 1, 2, 3, null] | +-----------------------------------------+
Bạn cũng có thể sử dụng JSON_ARRAY_INSERT() để chèn các giá trị vào một mảng.