W MariaDB, JSON_KEYS()
to wbudowana funkcja, która zwraca tablicę kluczy najwyższego poziomu z dokumentu JSON. Jeśli podana jest ścieżka, zwraca ona klucze najwyższego poziomu z tej ścieżki.
Wyklucza klucze z zagnieżdżonych obiektów podrzędnych na określonym poziomie.
Ponadto, jeśli wybrany obiekt jest pusty, zwracana jest pusta tablica.
Składnia
Składnia wygląda tak:
JSON_KEYS(json_doc[, path])
Gdzie json_doc
jest dokumentem JSON i path
to ścieżka w dokumencie.
Przykład
Oto przykład do zademonstrowania.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_KEYS(@json_document);
Wynik:
+----------------------------+ | JSON_KEYS(@json_document) | +----------------------------+ | ["name", "type", "weight"] | +----------------------------+
Określanie ścieżki
Oto przykład określenia ścieżki w dokumencie:
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;
Wynik:
+------------------------------+ | Result | +------------------------------+ | ["type", "weight", "awards"] | +------------------------------+
Jak wspomniano, podobiekty są wykluczone z wyniku.
Nieistniejące ścieżki
Przekazanie ścieżki, która nie istnieje w dokumencie JSON, daje w wyniku NULL
.
Przykład:
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;
Wynik:
+--------+ | Result | +--------+ | NULL | +--------+
Puste obiekty
Jeśli wybrany obiekt jest pusty, zwracana jest pusta tablica:
SELECT JSON_KEYS('{}');
Wynik:
+-----------------+ | JSON_KEYS('{}') | +-----------------+ | [] | +-----------------+
Argumenty zerowe
Jeśli jakikolwiek argument ma wartość NULL
, wynik to NULL
:
SELECT
JSON_KEYS(null),
JSON_KEYS(null, '$.type'),
JSON_KEYS('{"a":1}', null);
Wynik:
+-----------------+---------------------------+----------------------------+ | JSON_KEYS(null) | JSON_KEYS(null, '$.type') | JSON_KEYS('{"a":1}', null) | +-----------------+---------------------------+----------------------------+ | NULL | NULL | NULL | +-----------------+---------------------------+----------------------------+
Nieprawidłowa liczba parametrów
Brak argumentów skutkuje błędem:
SELECT JSON_KEYS();
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_KEYS'
Tak samo jest, gdy podasz za mało lub za dużo argumentów:
SELECT JSON_KEYS('{ "a": 1}', 1, 2);
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_KEYS'