sql >> Base de Datos >  >> RDS >> MariaDB

Explicación de MariaDB JSON_QUERY()

En MariaDB, JSON_QUERY() es una función integrada que devuelve un objeto o una matriz de un documento JSON, según la ruta proporcionada.

Es similar al JSON_VALUE() función, excepto que devuelve un objeto o matriz en lugar de un escalar (JSON_VALUE() devuelve un escalar).

Sintaxis

La sintaxis es así:

JSON_QUERY(json_doc, path)

Donde json_doc es el documento JSON y path es una ruta dentro del documento.

Ejemplo

Aquí hay un ejemplo para demostrarlo.

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

Resultado:

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

Podemos usar la notación de puntos para bajar al siguiente objeto anidado:

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

Resultado:

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

Arreglos

Aquí hay un ejemplo de devolver una matriz:

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

Resultado:

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

Si desea devolver un elemento de matriz real, pruebe JSON_VALUE() función.

Ruta inexistente

Pasar una ruta que no existe en el documento JSON da como resultado NULL .

Ejemplo:

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

Resultado:

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

Valores escalares

Intentar devolver un valor escalar devuelve NULL .

Ejemplo:

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

Resultado:

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

Para devolver un valor escalar, utilice JSON_VALUE() función.

Argumentos nulos

Si algún argumento es NULL , el resultado es NULL :

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

Resultado:

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

Recuento de parámetros incorrecto

No proporcionar argumentos da como resultado un error:

SELECT JSON_QUERY();

Resultado:

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

Es lo mismo cuando proporciona muy pocos o demasiados argumentos:

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

Resultado:

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