Trong MySQL, JSON_KEYS()
hàm trả về các khóa từ giá trị cấp cao nhất của một đối tượng JSON. Các khóa được trả về dưới dạng một mảng JSON hoặc nếu là một path
đối số được đưa ra, các khóa cấp cao nhất từ đường dẫn đã chọn.
Bạn cung cấp tài liệu JSON làm đối số cho hàm.
Bạn cũng có thể (tùy chọn) cung cấp đối số thứ hai để chỉ định vị trí bắt đầu đường dẫn "cấp cao nhất" trong tài liệu JSON.
Cú pháp
Cú pháp như sau:
JSON_KEYS(json_doc[, path])
Ở đâu json_doc
là tài liệu JSON và path
là một đối số tùy chọn để xác định vị trí bắt đầu của đường dẫn "cấp cao nhất" trong tài liệu JSON.
Mảng kết quả trống nếu đối tượng được chọn trống. Nếu giá trị cấp cao nhất có các subobject lồng nhau, giá trị trả về không bao gồm các khóa từ các subobject đó.
Ví dụ 1 - Cách sử dụng cơ bản
Đây là một ví dụ để chứng minh.
SELECT JSON_KEYS('{"a": 1, "b": 2, "c": 3}') AS 'Result';
Kết quả:
+-----------------+ | Result | +-----------------+ | ["a", "b", "c"] | +-----------------+
Đây là một ví dụ khác:
SELECT JSON_KEYS('{"Name": "Bart", "Age": 10}') AS 'Result';
Kết quả:
+-----------------+ | Result | +-----------------+ | ["Age", "Name"] | +-----------------+
Ví dụ 2 - Chỉ định một đường dẫn
Dưới đây là một ví dụ về việc chỉ định một đường dẫn. Điều này cho phép chúng tôi lấy các khóa từ một đối tượng lồng nhau (thay vì chỉ giới hạn ở đối tượng cấp cao nhất của toàn bộ tài liệu JSON).
SELECT JSON_KEYS('{"a": 1, "b": 2, "c": {"d": 3, "e": 4, "f": 5}}', '$.c') AS 'Result';
Kết quả:
+-----------------+ | Result | +-----------------+ | ["d", "e", "f"] | +-----------------+
Ví dụ 3 - Đường dẫn Không tồn tại
Nếu bạn chỉ định một đường dẫn không tồn tại, giá trị NULL sẽ được trả về.
SELECT JSON_KEYS('{"a": 1, "b": 2, "c": {"d": 3, "e": 4, "f": 5}}', '$.z') AS 'Result';
Kết quả:
+--------+ | Result | +--------+ | NULL | +--------+
Bạn cũng sẽ nhận được giá trị NULL nếu bất kỳ đối số nào là NULL
hoặc nếu đối số đầu tiên không phải là đối tượng JSON.
Ví dụ 4 - Mảng
Mảng không phải là đối tượng và chúng không chứa các cặp khóa / giá trị. Do đó, bạn sẽ nhận được giá trị NULL nếu bạn cố gắng trả về các khóa từ một mảng.
SELECT JSON_KEYS('[1, 2, 3]') AS 'Result';
Kết quả:
+--------+ | Result | +--------+ | NULL | +--------+
Tuy nhiên, nếu bất kỳ phần tử nào của mảng chứa một đối tượng, bạn vẫn có thể sử dụng path
đối số để lấy các khóa từ đối tượng đó.
SELECT JSON_KEYS('[1, 2, {"a": 1, "b": 2}]', '$[2]') AS 'Result';
Kết quả:
+------------+ | Result | +------------+ | ["a", "b"] | +------------+
Ví dụ 5 - Đối tượng rỗng
Nếu đối tượng đã chọn trống, bạn sẽ nhận được một mảng trống.
SELECT JSON_KEYS('{}') AS 'Result';
Kết quả:
+--------+ | Result | +--------+ | [] | +--------+