В MariaDB, JSON_LENGTH()
е вградена функция, която връща дължината на JSON документ.
Когато извикате тази функция, вие предоставяте документа JSON като аргумент. Можете също да предоставите аргумент за път, за да върнете дължината на стойност в документа.
Дължината се определя, както следва:
- Дължината на скалар винаги е 1.
- Ако е масив, броят на елементите в масива.
- Ако обект, броят на членовете в обекта.
Дължината на вложените масиви или обекти не се отчита.
Синтаксис
Синтаксисът е така:
JSON_LENGTH(json_doc[, path])
Където json_doc
е JSON документът и path
е незадължителен аргумент, който определя път в документа.
Пример
Ето пример за демонстрация.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_LENGTH(@json_document);
Резултат:
+-----------------------------+ | JSON_LENGTH(@json_document) | +-----------------------------+ | 3 | +-----------------------------+
Указване на път
Ето пример за посочване на път в документа:
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');
Резултат:
+------------------------------------------+ | JSON_LENGTH(@json_document, '$.details') | +------------------------------------------+ | 2 | +------------------------------------------+
Както споменахме, той не отчита дължината на вложените обекти, така че получаваме резултат от 2
.
Следващият пример слиза с едно ниво надолу и отчита дължината на awards
обект:
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');
Резултат:
+-------------------------------------------------+ | JSON_LENGTH(@json_document, '$.details.awards') | +-------------------------------------------------+ | 3 | +-------------------------------------------------+
Скаляри
Дължината на скалар винаги е 1
:
SELECT JSON_LENGTH(
'{ "a" : 378, "b" : 45 }',
'$.a'
) AS Result;
Резултат:
+--------+ | Result | +--------+ | 1 | +--------+
Масиви
Ако документът е масив, JSON_LENGTH()
отчита броя на елементите в масива:
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"scores": [9, 7, 8, 10, 3]
}
';
SELECT JSON_LENGTH(@json_document, '$.scores');
Резултат:
+-----------------------------------------+ | JSON_LENGTH(@json_document, '$.scores') | +-----------------------------------------+ | 5 | +-----------------------------------------+
Несъществуващи пътища
Предаването на път, който не съществува в JSON документа, води до NULL
.
Пример:
SET @json_document = '
{
"name": "Wag",
"type": "Dog"
}
';
SELECT JSON_LENGTH(@json_document, '$.oops');
Резултат:
+---------------------------------------+ | JSON_LENGTH(@json_document, '$.oops') | +---------------------------------------+ | NULL | +---------------------------------------+
Празни обекти
Ако избраният обект е празен, резултатът е 0
:
SELECT JSON_LENGTH('{}');
Резултат:
+-------------------+ | JSON_LENGTH('{}') | +-------------------+ | 0 | +-------------------+
Нулеви аргументи
Ако някой аргумент е NULL
, резултатът е NULL
:
SELECT
JSON_LENGTH(null) AS a,
JSON_LENGTH(null, '$.type') AS b,
JSON_LENGTH('{"a":1}', null) AS c;
Резултат:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Неправилен брой параметри
Предоставянето на без аргументи води до грешка:
SELECT JSON_LENGTH();
Резултат:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_LENGTH'