In MariaDB, JSON_LENGTH()
is een ingebouwde functie die de lengte van een JSON-document retourneert.
Wanneer u deze functie aanroept, geeft u het JSON-document als argument op. U kunt ook een padargument opgeven om de lengte van een waarde in het document te retourneren.
De lengte wordt als volgt bepaald:
- De lengte van een scalaire waarde is altijd 1.
- Indien een array, het aantal elementen in de array.
- Indien een object, het aantal leden in het object.
De lengte van geneste arrays of objecten wordt niet meegeteld.
Syntaxis
De syntaxis gaat als volgt:
JSON_LENGTH(json_doc[, path])
Waar json_doc
is het JSON-document, en path
is een optioneel argument dat een pad in het document aangeeft.
Voorbeeld
Hier is een voorbeeld om te demonstreren.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_LENGTH(@json_document);
Resultaat:
+-----------------------------+ | JSON_LENGTH(@json_document) | +-----------------------------+ | 3 | +-----------------------------+
Een pad specificeren
Hier is een voorbeeld van het specificeren van een pad binnen het document:
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');
Resultaat:
+------------------------------------------+ | JSON_LENGTH(@json_document, '$.details') | +------------------------------------------+ | 2 | +------------------------------------------+
Zoals vermeld, telt het niet de lengte van geneste objecten, dus we krijgen een resultaat van 2
.
Het volgende voorbeeld gaat een niveau omlaag en telt de lengte van de awards
voorwerp:
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');
Resultaat:
+-------------------------------------------------+ | JSON_LENGTH(@json_document, '$.details.awards') | +-------------------------------------------------+ | 3 | +-------------------------------------------------+
Scalaren
De lengte van een scalaire waarde is altijd 1
:
SELECT JSON_LENGTH(
'{ "a" : 378, "b" : 45 }',
'$.a'
) AS Result;
Resultaat:
+--------+ | Result | +--------+ | 1 | +--------+
Arrays
Als het document een array is, JSON_LENGTH()
telt het aantal elementen in de array:
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"scores": [9, 7, 8, 10, 3]
}
';
SELECT JSON_LENGTH(@json_document, '$.scores');
Resultaat:
+-----------------------------------------+ | JSON_LENGTH(@json_document, '$.scores') | +-----------------------------------------+ | 5 | +-----------------------------------------+
Niet-bestaande paden
Het doorgeven van een pad dat niet bestaat in het JSON-document resulteert in NULL
.
Voorbeeld:
SET @json_document = '
{
"name": "Wag",
"type": "Dog"
}
';
SELECT JSON_LENGTH(@json_document, '$.oops');
Resultaat:
+---------------------------------------+ | JSON_LENGTH(@json_document, '$.oops') | +---------------------------------------+ | NULL | +---------------------------------------+
Lege objecten
Als het geselecteerde object leeg is, is het resultaat 0
:
SELECT JSON_LENGTH('{}');
Resultaat:
+-------------------+ | JSON_LENGTH('{}') | +-------------------+ | 0 | +-------------------+
Nullargumenten
Als een argument NULL
is , het resultaat is NULL
:
SELECT
JSON_LENGTH(null) AS a,
JSON_LENGTH(null, '$.type') AS b,
JSON_LENGTH('{"a":1}', null) AS c;
Resultaat:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Onjuist aantal parameters
Het verstrekken van geen argumenten resulteert in een fout:
SELECT JSON_LENGTH();
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_LENGTH'