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'