I MariaDB, JSON_LENGTH()
är en inbyggd funktion som returnerar längden på ett JSON-dokument.
När du anropar den här funktionen tillhandahåller du JSON-dokumentet som ett argument. Du kan också ange ett sökvägsargument för att returnera längden på ett värde i dokumentet.
Längden bestäms enligt följande:
- En skalärs längd är alltid 1.
- Om en array, antalet element i arrayen.
- Om ett objekt, antalet medlemmar i objektet.
Längden på kapslade arrayer eller objekt räknas inte.
Syntax
Syntaxen ser ut så här:
JSON_LENGTH(json_doc[, path])
Där json_doc
är JSON-dokumentet och path
är ett valfritt argument som anger en sökväg i dokumentet.
Exempel
Här är ett exempel att visa.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_LENGTH(@json_document);
Resultat:
+-----------------------------+ | JSON_LENGTH(@json_document) | +-----------------------------+ | 3 | +-----------------------------+
Ange en sökväg
Här är ett exempel på hur du anger en sökväg i dokumentet:
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');
Resultat:
+------------------------------------------+ | JSON_LENGTH(@json_document, '$.details') | +------------------------------------------+ | 2 | +------------------------------------------+
Som nämnts räknar den inte längden på kapslade objekt, så vi får resultatet av 2
.
Nästa exempel går ner en nivå och räknar längden på 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');
Resultat:
+-------------------------------------------------+ | JSON_LENGTH(@json_document, '$.details.awards') | +-------------------------------------------------+ | 3 | +-------------------------------------------------+
Skalärer
En skalärs längd är alltid 1
:
SELECT JSON_LENGTH(
'{ "a" : 378, "b" : 45 }',
'$.a'
) AS Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
Arrayer
Om dokumentet är en array, JSON_LENGTH()
räknar antalet element i arrayen:
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"scores": [9, 7, 8, 10, 3]
}
';
SELECT JSON_LENGTH(@json_document, '$.scores');
Resultat:
+-----------------------------------------+ | JSON_LENGTH(@json_document, '$.scores') | +-----------------------------------------+ | 5 | +-----------------------------------------+
Icke-existerande vägar
Att skicka en sökväg som inte finns i JSON-dokumentet resulterar i NULL
.
Exempel:
SET @json_document = '
{
"name": "Wag",
"type": "Dog"
}
';
SELECT JSON_LENGTH(@json_document, '$.oops');
Resultat:
+---------------------------------------+ | JSON_LENGTH(@json_document, '$.oops') | +---------------------------------------+ | NULL | +---------------------------------------+
Tömma objekt
Om det valda objektet är tomt är resultatet 0
:
SELECT JSON_LENGTH('{}');
Resultat:
+-------------------+ | JSON_LENGTH('{}') | +-------------------+ | 0 | +-------------------+
Nollargument
Om något argument är NULL
, resultatet är NULL
:
SELECT
JSON_LENGTH(null) AS a,
JSON_LENGTH(null, '$.type') AS b,
JSON_LENGTH('{"a":1}', null) AS c;
Resultat:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Felaktig parameterräkning
Att inte tillhandahålla några argument resulterar i ett fel:
SELECT JSON_LENGTH();
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_LENGTH'