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

Spiegazione di MariaDB JSON_QUERY()

In MariaDB, JSON_QUERY() è una funzione incorporata che restituisce un oggetto o un array da un documento JSON, in base al percorso fornito.

È simile a JSON_VALUE() funzione, tranne per il fatto che restituisce un oggetto o un array invece di uno scalare (JSON_VALUE() restituisce uno scalare).

Sintassi

La sintassi è questa:

JSON_QUERY(json_doc, path)

Dove json_doc è il documento JSON e path è un percorso all'interno del documento.

Esempio

Ecco un esempio da dimostrare.

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

Risultato:

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

Possiamo usare la notazione del punto per passare al prossimo oggetto nidificato:

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

Risultato:

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

Array

Ecco un esempio di restituzione di un array:

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

Risultato:

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

Se vuoi restituire un vero elemento dell'array, prova JSON_VALUE() funzione.

Percorso inesistente

Il passaggio di un percorso che non esiste nel documento JSON restituisce NULL .

Esempio:

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

Risultato:

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

Valori scalari

Il tentativo di restituire un valore scalare restituisce NULL .

Esempio:

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

Risultato:

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

Per restituire un valore scalare, usa JSON_VALUE() funzione.

Argomenti nulli

Se un argomento è NULL , il risultato è NULL :

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

Risultato:

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

Conteggio parametri errato

Non fornire argomenti genera un errore:

SELECT JSON_QUERY();

Risultato:

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

È lo stesso quando fornisci troppi pochi o troppi argomenti:

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

Risultato:

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