Khi sử dụng tài liệu JSON với MySQL, bạn có thể sử dụng JSON_ARRAY_APPEND()
hàm để nối các giá trị mới vào một mảng.
Cách thức hoạt động của nó là, bạn cung cấp tài liệu JSON làm đối số đầu tiên, sau đó theo sau đó với đường dẫn để thêm vào, tiếp theo là giá trị để nối thêm.
Trong MySQL 5.7, hàm này được gọi là JSON_APPEND()
nhưng tên đó không còn được hỗ trợ.
Cú pháp
Cú pháp như sau:
JSON_ARRAY_APPEND(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ử để nối giá trị mới vào. -
val
là giá trị mới sẽ được thêm vào.
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_APPEND('[1, 2, 3]', '$', 4) AS 'Result';
Kết quả:
+--------------+ | Result | +--------------+ | [1, 2, 3, 4] | +--------------+
Vì vậy, đối số thứ 3 được nối vào mảng. Trong trường hợp này, tôi sử dụng $
cho đường dẫn. Đây là một từ đồng nghĩa với tài liệu JSON, vì vậy giá trị được nối vào mảng cấp cao nhất (trong trường hợp này là mảng duy nhất).
Ví dụ 2 - 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 được lồng vào bên trong một mảng khác.
SELECT JSON_ARRAY_APPEND('[1, 2, [3, 4]]', '$[2]', 5) AS 'Result';
Kết quả:
+-------------------+ | Result | +-------------------+ | [1, 2, [3, 4, 5]] | +-------------------+
Vì vậy, ở đây, tôi sử dụng $[2]
như đường dẫn. Điều này chỉ định mảng ở phần tử thứ ba (mảng sử dụng đánh số dựa trên 0, do đó, số lượng bắt đầu từ 0).
Nếu chưa có một mảng tại phần tử đó, một mảng mới sẽ được tạo.
Như thế này:
SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$[2]', 4) AS 'Result';
Kết quả:
+----------------+ | Result | +----------------+ | [1, 2, [3, 4]] | +----------------+
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_APPEND(@data, '$.Person.Hobbies', "Base Jumping") AS 'Result';
Kết quả:
+----------------------------------------------------------------------------------+ | Result | +----------------------------------------------------------------------------------+ | {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping", "Base Jumping"]}} | +----------------------------------------------------------------------------------+
Và cũng giống như trong ví dụ trước, chúng ta cũng có thể tạo một mảng lồng nhau mới, nếu được yêu cầu:
SET @data = '{ "Person": { "Name": "Homer", "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies[0]', "Drinking") AS 'Result';
Kết quả:
+--------------------------------------------------------------------------------+ | Result | +--------------------------------------------------------------------------------+ | {"Person": {"Name": "Homer", "Hobbies": [["Eating", "Drinking"], "Sleeping"]}} | +--------------------------------------------------------------------------------+