sql >> Database >  >> RDS >> MariaDB

MariaDB JSON_LENGTH() uitgelegd

In MariaDB, JSON_LENGTH() is een ingebouwde functie die de lengte van een JSON-document retourneert.

Wanneer u deze functie aanroept, geeft u het JSON-document als argument op. U kunt ook een padargument opgeven om de lengte van een waarde in het document te retourneren.

De lengte wordt als volgt bepaald:

  • De lengte van een scalaire waarde is altijd 1.
  • Indien een array, het aantal elementen in de array.
  • Indien een object, het aantal leden in het object.

De lengte van geneste arrays of objecten wordt niet meegeteld.

Syntaxis

De syntaxis gaat als volgt:

JSON_LENGTH(json_doc[, path])

Waar json_doc is het JSON-document, en path is een optioneel argument dat een pad in het document aangeeft.

Voorbeeld

Hier is een voorbeeld om te demonstreren.

SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "weight": 20 
    }
';
SELECT JSON_LENGTH(@json_document);

Resultaat:

+-----------------------------+
| JSON_LENGTH(@json_document) |
+-----------------------------+
|                           3 |
+-----------------------------+

Een pad specificeren

Hier is een voorbeeld van het specificeren van een pad binnen het document:

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');

Resultaat:

+------------------------------------------+
| JSON_LENGTH(@json_document, '$.details') |
+------------------------------------------+
|                                        2 |
+------------------------------------------+

Zoals vermeld, telt het niet de lengte van geneste objecten, dus we krijgen een resultaat van 2 .

Het volgende voorbeeld gaat een niveau omlaag en telt de lengte van de awards voorwerp:

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');

Resultaat:

+-------------------------------------------------+
| JSON_LENGTH(@json_document, '$.details.awards') |
+-------------------------------------------------+
|                                               3 |
+-------------------------------------------------+

Scalaren

De lengte van een scalaire waarde is altijd 1 :

SELECT JSON_LENGTH( 
    '{ "a" : 378, "b" : 45 }', 
    '$.a' 
    ) AS Result;

Resultaat:

+--------+
| Result |
+--------+
|      1 |
+--------+

Arrays

Als het document een array is, JSON_LENGTH() telt het aantal elementen in de array:

SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "scores": [9, 7, 8, 10, 3] 
    }
';
SELECT JSON_LENGTH(@json_document, '$.scores');

Resultaat:

+-----------------------------------------+
| JSON_LENGTH(@json_document, '$.scores') |
+-----------------------------------------+
|                                       5 |
+-----------------------------------------+

Niet-bestaande paden

Het doorgeven van een pad dat niet bestaat in het JSON-document resulteert in NULL .

Voorbeeld:

SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog"
    }
';
SELECT JSON_LENGTH(@json_document, '$.oops');

Resultaat:

+---------------------------------------+
| JSON_LENGTH(@json_document, '$.oops') |
+---------------------------------------+
|                                  NULL |
+---------------------------------------+

Lege objecten

Als het geselecteerde object leeg is, is het resultaat 0 :

SELECT JSON_LENGTH('{}');

Resultaat:

+-------------------+
| JSON_LENGTH('{}') |
+-------------------+
|                 0 |
+-------------------+

Nullargumenten

Als een argument NULL is , het resultaat is NULL :

SELECT 
    JSON_LENGTH(null) AS a,
    JSON_LENGTH(null, '$.type') AS b,
    JSON_LENGTH('{"a":1}', null) AS c;

Resultaat:

+------+------+------+
| a    | b    | c    |
+------+------+------+
| NULL | NULL | NULL |
+------+------+------+

Onjuist aantal parameters

Het verstrekken van geen argumenten resulteert in een fout:

SELECT JSON_LENGTH();

Resultaat:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_LENGTH'

  1. hoe xmltable te gebruiken in orakel?

  2. Genereer een willekeurig getal in het bereik 1 - 10

  3. Is mysql_real_escape_string() kapot?

  4. 2 manieren om alle tabelwaardige functies in een SQL Server-database op te sommen