W MariaDB, JSON_LENGTH()
to wbudowana funkcja, która zwraca długość dokumentu JSON.
Gdy wywołujesz tę funkcję, podajesz dokument JSON jako argument. Możesz również podać argument ścieżki, aby zwrócić długość wartości w dokumencie.
Długość określa się w następujący sposób:
- Długość skalara wynosi zawsze 1.
- Jeśli tablica, liczba elementów w tablicy.
- Jeśli obiekt, liczba członków w obiekcie.
Długość zagnieżdżonych tablic lub obiektów nie jest liczona.
Składnia
Składnia wygląda tak:
JSON_LENGTH(json_doc[, path])
Gdzie json_doc
jest dokumentem JSON i path
jest opcjonalnym argumentem, który określa ścieżkę w dokumencie.
Przykład
Oto przykład do zademonstrowania.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_LENGTH(@json_document);
Wynik:
+-----------------------------+ | JSON_LENGTH(@json_document) | +-----------------------------+ | 3 | +-----------------------------+
Określanie ścieżki
Oto przykład określenia ścieżki w dokumencie:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_LENGTH(@json_document, '$.details');
Wynik:
+------------------------------------------+ | JSON_LENGTH(@json_document, '$.details') | +------------------------------------------+ | 2 | +------------------------------------------+
Jak wspomniano, nie zlicza długości zagnieżdżonych obiektów, więc otrzymujemy wynik 2
.
Następny przykład idzie w dół i zlicza długość awards
obiekt:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_LENGTH(@json_document, '$.details.awards');
Wynik:
+-------------------------------------------------+ | JSON_LENGTH(@json_document, '$.details.awards') | +-------------------------------------------------+ | 3 | +-------------------------------------------------+
Skalary
Długość skalara to zawsze 1
:
SELECT JSON_LENGTH(
'{ "a" : 378, "b" : 45 }',
'$.a'
) AS Result;
Wynik:
+--------+ | Result | +--------+ | 1 | +--------+
Tablice
Jeśli dokument jest tablicą, JSON_LENGTH()
zlicza liczbę elementów w tablicy:
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"scores": [9, 7, 8, 10, 3]
}
';
SELECT JSON_LENGTH(@json_document, '$.scores');
Wynik:
+-----------------------------------------+ | JSON_LENGTH(@json_document, '$.scores') | +-----------------------------------------+ | 5 | +-----------------------------------------+
Nieistniejące ścieżki
Przekazanie ścieżki, która nie istnieje w dokumencie JSON, daje w wyniku NULL
.
Przykład:
SET @json_document = '
{
"name": "Wag",
"type": "Dog"
}
';
SELECT JSON_LENGTH(@json_document, '$.oops');
Wynik:
+---------------------------------------+ | JSON_LENGTH(@json_document, '$.oops') | +---------------------------------------+ | NULL | +---------------------------------------+
Puste obiekty
Jeśli wybrany obiekt jest pusty, wynikiem jest 0
:
SELECT JSON_LENGTH('{}');
Wynik:
+-------------------+ | JSON_LENGTH('{}') | +-------------------+ | 0 | +-------------------+
Argumenty zerowe
Jeśli jakikolwiek argument ma wartość NULL
, wynik to NULL
:
SELECT
JSON_LENGTH(null) AS a,
JSON_LENGTH(null, '$.type') AS b,
JSON_LENGTH('{"a":1}', null) AS c;
Wynik:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Nieprawidłowa liczba parametrów
Brak argumentów skutkuje błędem:
SELECT JSON_LENGTH();
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_LENGTH'