Trong MySQL, JSON_ARRAY_INSERT()
hàm được sử dụng để chèn một giá trị mới vào một mảng.
Bạn cung cấp tài liệu JSON làm đối số đầu tiên, theo sau là đường dẫn để chèn vào, tiếp theo là giá trị để chèn.
Cú pháp
Cú pháp như sau:
JSON_INSERT(json_doc, path, val[, path, val] ...)
Ở đâu:
-
json_doc
là tài liệu JSON. -
path
là đường dẫn của phần tử để chèn giá trị mới vào. -
val
là giá trị mới sẽ được chèn.
Các cặp giá trị-đường dẫn được đánh giá từ trái sang phải. Tài liệu được tạo ra bằng cách đánh giá một cặp sẽ trở thành giá trị mới mà cặp tiếp theo được đánh giá.
Ví dụ 1 - Cách sử dụng cơ bản
Đây là một ví dụ để chứng minh.
SELECT JSON_ARRAY_INSERT('[1, 2, 3]', '$[1]', 4) AS 'Result';
Kết quả:
+--------------+ | Result | +--------------+ | [1, 4, 2, 3] | +--------------+
Vì vậy, đối số thứ 3 được chèn vào mảng tại đường dẫn được chỉ định. Trong trường hợp này, tôi sử dụng $[1]
cho đường dẫn, tham chiếu đến phần tử thứ hai (mảng JSON sử dụng đánh số dựa trên số 0 - việc đánh số bắt đầu từ 0
).
Ví dụ 2 - 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 được lồng vào bên trong một mảng khác.
SELECT JSON_ARRAY_INSERT('[1, 2, [3, 4]]', '$[2][1]', 5) AS 'Result';
Kết quả:
+-------------------+ | Result | +-------------------+ | [1, 2, [3, 5, 4]] | +-------------------+
Vì vậy, ở đây, tôi sử dụng $[2][1]
như đường dẫn. [2]
đề cập đến phần tử thứ 3 của mảng bên ngoài. [1]
đề cập đến phần tử thứ 2 của mảng lồng nhau.
Ví dụ 3 - Tài liệu JSON lớn hơn
Ví dụ này sử dụng tài liệu JSON lớn hơn (một chút). Điều này cho thấy đường dẫn thay đổi như thế nào tùy thuộc vào vị trí của mảng trong tài liệu.
SET @data = '{ "Person": { "Name": "Homer", "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_ARRAY_INSERT(@data, '$.Person.Hobbies[1]', "Base Jumping") AS 'Result';
Kết quả:
+----------------------------------------------------------------------------------+ | Result | +----------------------------------------------------------------------------------+ | {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Base Jumping", "Sleeping"]}} | +----------------------------------------------------------------------------------+