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

MariaDB JSON_LENGTH() Forklaret

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'

  1. Hvordan opdaterer jeg fra en SELECT i SQL Server?

  2. MariaDB JSON_OBJECT() Forklaret

  3. C# parametriserede forespørgsler til Oracle - alvorlig og farlig fejl!

  4. Sådan installeres ODP.NET 2.111 og ODP.NET 4.112 på den samme maskine side om side, mens begge peger på den samme databaseserver