In MariaDB, JSON_LENGTH()
è una funzione incorporata che restituisce la lunghezza di un documento JSON.
Quando chiami questa funzione, fornisci il documento JSON come argomento. Puoi anche fornire un argomento di percorso per restituire la lunghezza di un valore all'interno del documento.
La lunghezza è determinata come segue:
- La lunghezza di uno scalare è sempre 1.
- Se un array, il numero di elementi nell'array.
- Se un oggetto, il numero di membri nell'oggetto.
La lunghezza degli array o degli oggetti nidificati non viene conteggiata.
Sintassi
La sintassi è questa:
JSON_LENGTH(json_doc[, path])
Dove json_doc
è il documento JSON e path
è un argomento facoltativo che specifica un percorso all'interno del documento.
Esempio
Ecco un esempio da dimostrare.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_LENGTH(@json_document);
Risultato:
+-----------------------------+ | JSON_LENGTH(@json_document) | +-----------------------------+ | 3 | +-----------------------------+
Specifica di un percorso
Ecco un esempio di specifica di un percorso all'interno del documento:
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');
Risultato:
+------------------------------------------+ | JSON_LENGTH(@json_document, '$.details') | +------------------------------------------+ | 2 | +------------------------------------------+
Come accennato, non conta la lunghezza degli oggetti nidificati, quindi otteniamo un risultato di 2
.
L'esempio successivo scende di un livello e conta la durata dei awards
oggetto:
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');
Risultato:
+-------------------------------------------------+ | JSON_LENGTH(@json_document, '$.details.awards') | +-------------------------------------------------+ | 3 | +-------------------------------------------------+
Scalari
La lunghezza di uno scalare è sempre 1
:
SELECT JSON_LENGTH(
'{ "a" : 378, "b" : 45 }',
'$.a'
) AS Result;
Risultato:
+--------+ | Result | +--------+ | 1 | +--------+
Array
Se il documento è un array, JSON_LENGTH()
conta il numero di elementi nell'array:
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"scores": [9, 7, 8, 10, 3]
}
';
SELECT JSON_LENGTH(@json_document, '$.scores');
Risultato:
+-----------------------------------------+ | JSON_LENGTH(@json_document, '$.scores') | +-----------------------------------------+ | 5 | +-----------------------------------------+
Percorsi inesistenti
Il passaggio di un percorso che non esiste nel documento JSON restituisce NULL
.
Esempio:
SET @json_document = '
{
"name": "Wag",
"type": "Dog"
}
';
SELECT JSON_LENGTH(@json_document, '$.oops');
Risultato:
+---------------------------------------+ | JSON_LENGTH(@json_document, '$.oops') | +---------------------------------------+ | NULL | +---------------------------------------+
Oggetti vuoti
Se l'oggetto selezionato è vuoto, il risultato è 0
:
SELECT JSON_LENGTH('{}');
Risultato:
+-------------------+ | JSON_LENGTH('{}') | +-------------------+ | 0 | +-------------------+
Argomenti nulli
Se un argomento è NULL
, il risultato è NULL
:
SELECT
JSON_LENGTH(null) AS a,
JSON_LENGTH(null, '$.type') AS b,
JSON_LENGTH('{"a":1}', null) AS c;
Risultato:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Conteggio parametri errato
Non fornire argomenti genera un errore:
SELECT JSON_LENGTH();
Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_LENGTH'