sql >> Database >  >> RDS >> MariaDB

MariaDB JSON_QUERY() uitgelegd

In MariaDB, JSON_QUERY() is een ingebouwde functie die een object of array retourneert uit een JSON-document, op basis van het opgegeven pad.

Het is vergelijkbaar met de JSON_VALUE() functie, behalve dat het een object of array retourneert in plaats van een scalaire waarde (JSON_VALUE() geeft een scalair terug).

Syntaxis

De syntaxis gaat als volgt:

JSON_QUERY(json_doc, path)

Waar json_doc is het JSON-document, en path is een pad binnen het document.

Voorbeeld

Hier is een voorbeeld om te demonstreren.

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog", 
                "Sumo 2020" : "Biggest Dog"
            }
        }
    }
';
SELECT JSON_QUERY(@json_document, '$.details');

Resultaat:

{
    "type" : "Dog", 
    "weight" : 20,
    "awards" : { 
        "Florida Dog Awards" : "Top Dog", 
        "New York Marathon" : "Fastest Dog", 
        "Sumo 2020" : "Biggest Dog"
    }
}

We kunnen puntnotatie gebruiken om naar het volgende geneste object te gaan:

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog", 
                "Sumo 2020" : "Biggest Dog"
            }
        }
    }
';
SELECT JSON_QUERY(@json_document, '$.details.awards');

Resultaat:

{ 
    "Florida Dog Awards" : "Top Dog", 
    "New York Marathon" : "Fastest Dog", 
    "Sumo 2020" : "Biggest Dog"
}

Arrays

Hier is een voorbeeld van het retourneren van een array:

SET @json_document = '
    { 
        "_id" : 1, 
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';
SELECT JSON_QUERY(@json_document, '$.awards');

Resultaat:

+------------------------------------------+
| JSON_QUERY(@json_document, '$.awards')   |
+------------------------------------------+
| [ "Top Dog", "Best Dog", "Biggest Dog" ] |
+------------------------------------------+

Als je een echt array-element wilt retourneren, probeer dan de JSON_VALUE() functie.

Niet-bestaand pad

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

Voorbeeld:

SET @json_document = '
    { 
        "_id" : 1, 
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';
SELECT JSON_QUERY(@json_document, '$.type');

Resultaat:

+--------------------------------------+
| JSON_QUERY(@json_document, '$.type') |
+--------------------------------------+
| NULL                                 |
+--------------------------------------+

Scalaire waarden

Poging om een ​​scalaire waarde te retourneren geeft NULL .

Voorbeeld:

SELECT JSON_QUERY('{ "weight": 10 }', '$.weight');

Resultaat:

+--------------------------------------------+
| JSON_QUERY('{ "weight": 10 }', '$.weight') |
+--------------------------------------------+
| NULL                                       |
+--------------------------------------------+

Gebruik de JSON_VALUE() . om een ​​scalaire waarde te retourneren functie.

Nullargumenten

Als een argument NULL is , het resultaat is NULL :

SELECT 
    JSON_QUERY(null, '$.type'),
    JSON_QUERY('{"a":1}', null);

Resultaat:

+----------------------------+-----------------------------+
| JSON_QUERY(null, '$.type') | JSON_QUERY('{"a":1}', null) |
+----------------------------+-----------------------------+
| NULL                       | NULL                        |
+----------------------------+-----------------------------+

Onjuist aantal parameters

Het verstrekken van geen argumenten resulteert in een fout:

SELECT JSON_QUERY();

Resultaat:

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

Hetzelfde geldt wanneer u te weinig of te veel argumenten geeft:

SELECT JSON_QUERY('{ "a": 1}');

Resultaat:

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

  1. Echt versus drijvende komma versus geld

  2. SQL-puntnotatie

  3. 4 manieren om dubbele rijen te vinden in MySQL

  4. Toegestane geheugengrootte van 8589934592 bytes uitgeput