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

MariaDB JSON_VALUE() explicado

En MariaDB, JSON_VALUE() es una función integrada que devuelve un valor escalar de un documento JSON. Más específicamente, devuelve el escalar especificado por la ruta proporcionada.

Sintaxis

La sintaxis es así:

JSON_VALUE(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 = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "weight": 20 
    }
';
SELECT JSON_VALUE(@json_document, '$.name');

Resultado:

+--------------------------------------+
| JSON_VALUE(@json_document, '$.name') |
+--------------------------------------+
| Wag                                  |
+--------------------------------------+

Ruta inexistente

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

Ejemplo:

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

Resultado:

+---------------------------------------+
| JSON_VALUE(@json_document, '$.color') |
+---------------------------------------+
| NULL                                  |
+---------------------------------------+

Arreglos

Este es un ejemplo de devolución de datos de una matriz:

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

Resultado:

+-------------------------------------------+
| JSON_VALUE(@json_document, '$.awards[1]') |
+-------------------------------------------+
| Best Dog                                  |
+-------------------------------------------+

Las matrices están basadas en cero, por lo que $.awards[1] extrae el segundo elemento de los awards matriz.

Objetos anidados

Aquí hay un ejemplo de cómo obtener un valor de un objeto anidado dentro de otro objeto:

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_VALUE(
    @json_document, 
    '$.details.awards.Florida Dog Awards'
    ) AS Result;

Resultado:

+---------+
| Result  |
+---------+
| Top Dog |
+---------+

Valores no escalares

Intentar devolver un valor no escalar (por ejemplo, un objeto o una matriz) devuelve NULL .

Ejemplo:

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_VALUE(
    @json_document, 
    '$.details.awards'
    ) AS Result;

Resultado:

+--------+
| Result |
+--------+
| NULL   |
+--------+

Para devolver un valor no escalar, use JSON_QUERY() función o JSON_EXTRACT() función.

Argumentos nulos

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

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

Resultado:

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

Recuento de parámetros incorrecto

No proporcionar argumentos da como resultado un error:

SELECT JSON_VALUE();

Resultado:

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

Es lo mismo cuando proporciona muy pocos o demasiados argumentos:

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

Resultado:

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