Trong MariaDB, JSON_KEYS()
là một hàm tích hợp trả về một mảng các khóa cấp cao nhất từ tài liệu JSON. Nếu một đường dẫn được cung cấp, nó sẽ trả về các khóa cấp cao nhất từ đường dẫn đó.
Nó loại trừ các khóa từ các đối tượng con lồng nhau trong cấp độ được chỉ định.
Ngoài ra, nếu đối tượng đã chọn trống, một mảng trống sẽ được trả về.
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 đường dẫn trong tài liệu.
Ví dụ
Đây là một ví dụ để chứng minh.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_KEYS(@json_document);
Kết quả:
+----------------------------+ | JSON_KEYS(@json_document) | +----------------------------+ | ["name", "type", "weight"] | +----------------------------+
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 trong tài liệu:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_KEYS(
@json_document,
'$.details'
) AS Result;
Kết quả:
+------------------------------+ | Result | +------------------------------+ | ["type", "weight", "awards"] | +------------------------------+
Như đã đề cập, các đối tượng phụ bị loại trừ khỏi kết quả.
Đường dẫn không tồn tại
Chuyển một đường dẫn không tồn tại trong tài liệu JSON dẫn đến NULL
.
Ví dụ:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_KEYS(
@json_document,
'$.wrong'
) AS Result;
Kết quả:
+--------+ | Result | +--------+ | NULL | +--------+
Đối tượng trống
Nếu đối tượng đã chọn trống, một mảng trống được trả về:
SELECT JSON_KEYS('{}');
Kết quả:
+-----------------+ | JSON_KEYS('{}') | +-----------------+ | [] | +-----------------+
Đối số rỗng
Nếu bất kỳ đối số nào là NULL
, kết quả là NULL
:
SELECT
JSON_KEYS(null),
JSON_KEYS(null, '$.type'),
JSON_KEYS('{"a":1}', null);
Kết quả:
+-----------------+---------------------------+----------------------------+ | JSON_KEYS(null) | JSON_KEYS(null, '$.type') | JSON_KEYS('{"a":1}', null) | +-----------------+---------------------------+----------------------------+ | NULL | NULL | NULL | +-----------------+---------------------------+----------------------------+
Đếm tham số không chính xác
Không cung cấp đối số dẫn đến lỗi:
SELECT JSON_KEYS();
Kết quả:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_KEYS'
Điều này cũng xảy ra tương tự khi bạn cung cấp quá ít hoặc quá nhiều đối số:
SELECT JSON_KEYS('{ "a": 1}', 1, 2);
Kết quả:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_KEYS'