I MariaDB, JSON_LENGTH()
er en indbygget funktion, der returnerer længden af et JSON-dokument.
Når du kalder denne funktion, angiver du JSON-dokumentet som et argument. Du kan også angive et sti-argument for at returnere længden af en værdi i dokumentet.
Længden bestemmes som følger:
- En skalars længde er altid 1.
- Hvis et array, antallet af elementer i arrayet.
- Hvis et objekt, antallet af medlemmer i objektet.
Længden af indlejrede arrays eller objekter tælles ikke.
Syntaks
Syntaksen ser sådan ud:
JSON_LENGTH(json_doc[, path])
Hvor json_doc
er JSON-dokumentet og path
er et valgfrit argument, der angiver en sti i dokumentet.
Eksempel
Her er et eksempel til at demonstrere.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_LENGTH(@json_document);
Resultat:
+-----------------------------+ | JSON_LENGTH(@json_document) | +-----------------------------+ | 3 | +-----------------------------+
Angivelse af en sti
Her er et eksempel på angivelse af en sti 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ævnt tæller det ikke længden af indlejrede objekter, så vi får et resultat af 2
.
Det næste eksempel går et niveau ned og tæller længden af 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 | +-------------------------------------------------+
Skalarer
En skalars længde er altid 1
:
SELECT JSON_LENGTH(
'{ "a" : 378, "b" : 45 }',
'$.a'
) AS Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
Arrays
Hvis dokumentet er et array, JSON_LENGTH()
tæller antallet af elementer i arrayet:
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 | +-----------------------------------------+
Ikke-eksisterende stier
At sende en sti, der ikke findes i JSON-dokumentet, resulterer i NULL
.
Eksempel:
SET @json_document = '
{
"name": "Wag",
"type": "Dog"
}
';
SELECT JSON_LENGTH(@json_document, '$.oops');
Resultat:
+---------------------------------------+ | JSON_LENGTH(@json_document, '$.oops') | +---------------------------------------+ | NULL | +---------------------------------------+
Tomme objekter
Hvis det valgte objekt er tomt, er resultatet 0
:
SELECT JSON_LENGTH('{}');
Resultat:
+-------------------+ | JSON_LENGTH('{}') | +-------------------+ | 0 | +-------------------+
Nul-argumenter
Hvis et argument er NULL
, resultatet er 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 | +------+------+------+
Forkert parameterantal
Angivelse af ingen argumenter resulterer i en fejl:
SELECT JSON_LENGTH();
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_LENGTH'