MariaDB
 sql >> Database >  >> RDS >> MariaDB

Spiegazione di MariaDB JSON_LENGTH()

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'