V MariaDB, JSON_LENGTH()
je vestavěná funkce, která vrací délku dokumentu JSON.
Když zavoláte tuto funkci, poskytnete jako argument dokument JSON. Můžete také zadat argument cesty, který vrátí délku hodnoty v dokumentu.
Délka je určena následovně:
- Délka skaláru je vždy 1.
- Pokud jde o pole, počet prvků v poli.
- Pokud jde o objekt, počet členů v objektu.
Délka vnořených polí nebo objektů se nepočítá.
Syntaxe
Syntaxe vypadá takto:
JSON_LENGTH(json_doc[, path])
Kde json_doc
je dokument JSON a path
je volitelný argument, který určuje cestu v dokumentu.
Příklad
Zde je příklad k demonstraci.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_LENGTH(@json_document);
Výsledek:
+-----------------------------+ | JSON_LENGTH(@json_document) | +-----------------------------+ | 3 | +-----------------------------+
Určení cesty
Zde je příklad zadání cesty v dokumentu:
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');
Výsledek:
+------------------------------------------+ | JSON_LENGTH(@json_document, '$.details') | +------------------------------------------+ | 2 | +------------------------------------------+
Jak již bylo zmíněno, nepočítá délku vnořených objektů, takže dostaneme výsledek 2
.
Další příklad jde o úroveň níže a počítá délku awards
objekt:
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');
Výsledek:
+-------------------------------------------------+ | JSON_LENGTH(@json_document, '$.details.awards') | +-------------------------------------------------+ | 3 | +-------------------------------------------------+
Skaláry
Délka skaláru je vždy 1
:
SELECT JSON_LENGTH(
'{ "a" : 378, "b" : 45 }',
'$.a'
) AS Result;
Výsledek:
+--------+ | Result | +--------+ | 1 | +--------+
Pole
Pokud je dokument pole, JSON_LENGTH()
počítá počet prvků v poli:
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"scores": [9, 7, 8, 10, 3]
}
';
SELECT JSON_LENGTH(@json_document, '$.scores');
Výsledek:
+-----------------------------------------+ | JSON_LENGTH(@json_document, '$.scores') | +-----------------------------------------+ | 5 | +-----------------------------------------+
Neexistující cesty
Předání cesty, která v dokumentu JSON neexistuje, má za následek NULL
.
Příklad:
SET @json_document = '
{
"name": "Wag",
"type": "Dog"
}
';
SELECT JSON_LENGTH(@json_document, '$.oops');
Výsledek:
+---------------------------------------+ | JSON_LENGTH(@json_document, '$.oops') | +---------------------------------------+ | NULL | +---------------------------------------+
Prázdné objekty
Pokud je vybraný objekt prázdný, výsledek je 0
:
SELECT JSON_LENGTH('{}');
Výsledek:
+-------------------+ | JSON_LENGTH('{}') | +-------------------+ | 0 | +-------------------+
Nulové argumenty
Pokud je některý argument NULL
, výsledkem je NULL
:
SELECT
JSON_LENGTH(null) AS a,
JSON_LENGTH(null, '$.type') AS b,
JSON_LENGTH('{"a":1}', null) AS c;
Výsledek:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Nesprávný počet parametrů
Pokud neposkytnete žádné argumenty, dojde k chybě:
SELECT JSON_LENGTH();
Výsledek:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_LENGTH'