sql >> Base de Datos >  >> RDS >> Mysql

JSON_VALUE() en MySQL

En MySQL, el JSON_VALUE() La función extrae un valor de un documento JSON en la ruta especificada.

La función se introdujo en MySQL 8.0.21.

Sintaxis

La sintaxis es así:

JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error])

donde:

on_empty:
    {NULL | ERROR | DEFAULT value} ON EMPTY

on_error:
    {NULL | ERROR | DEFAULT value} ON ERROR

Ejemplo

Aquí hay un ejemplo simple para demostrarlo:

SELECT JSON_VALUE( '{ "name" : "Wag", "type" : "Dog" }', '$.type' );

Resultado:

Dog

Arreglos

Aquí hay un ejemplo de cómo obtener un valor de una matriz:

SELECT JSON_VALUE( '{ "name" : "Wag", "scores" : [ 25, 36, 48 ] }', '$.scores[1]' );

Resultado:

36

Las matrices están basadas en cero, por lo que 1 devuelve el segundo elemento (0 devolvería el primero).

Documentos incrustados

Este es un ejemplo de cómo obtener un valor de un objeto incrustado:

SELECT JSON_VALUE(
    '{ 
        "_id" : 1, 
        "details" : { 
            "name" : "Wag",
            "type" : "Dog"
            } 
    }', 
    '$.details.type' 
    );

Resultado:

Dog

Tipo de devolución

Aquí hay un ejemplo de cómo especificar el tipo de retorno:

SELECT JSON_VALUE(
    '{ 
        "_id" : 1, 
        "details" : { 
            "name" : "Wag",
            "type" : "Dog"
            } 
    }', 
    '$.details' RETURNING json
    );

Resultado:

{"name": "Wag", "type": "Dog"}

Si no especifica el tipo de retorno, el tipo de retorno es VARCHAR(512) .

Resultados vacíos

De forma predeterminada, si no se encuentran datos en la ruta especificada, NULL se devuelve:

SELECT JSON_VALUE(
    '{ 
        "name" : "Wag",
        "type" : "Dog"
    }', 
    '$.score'
    );

Resultado:

NULL

Sin embargo, las siguientes opciones se pueden usar para especificar explícitamente qué debe suceder cuando no se encuentran datos en la ruta dada:

  • NULL ON EMPTY :La función devuelve NULL; este es el comportamiento predeterminado.
  • DEFAULT value EN VACÍO :el value proporcionado es regresado. El tipo de valor debe coincidir con el tipo de devolución.
  • ERROR ON EMPTY :La función arroja un error.

Ejemplo:

SELECT JSON_VALUE(
    '{ 
        "name" : "Wag",
        "type" : "Dog"
    }', 
    '$.score' 
    DEFAULT 'Nothing found' ON EMPTY
    );

Resultado:

Nothing found

Errores

Se puede usar lo siguiente para especificar qué sucede cuando ocurre un error:

  • NULL ON ERROR :JSON_VALUE() devuelve NULL; este es el comportamiento predeterminado.
  • DEFAULT value EN ERROR :Este es el valor devuelto; su valor debe coincidir con el del tipo de retorno.
  • ERROR ON ERROR :Se lanza un error.

Si se usa, ON EMPTY debe preceder a cualquier ON ERROR cláusula. Especificarlos en el orden incorrecto da como resultado un error de sintaxis.

Índices

Como se menciona en las notas de la versión de MySQL 8.0.21, JSON_VALUE() La función simplifica la creación de índices en JSON columnas Una llamada a JSON_VALUE(json_doc , path DEVOLUCIÓN type ) es equivalente a llamar a CAST( JSON_UNQUOTE( JSON_EXTRACT(json_doc , path ) ) COMO type ) .

Este es el ejemplo utilizado en las notas de la versión:

CREATE TABLE inventory(
    items JSON,
    INDEX i1 ( (JSON_VALUE(items, '$.name' RETURNING CHAR(50))) ),
    INDEX i2 ( (JSON_VALUE(items, '$.price' RETURNING DECIMAL(5,2))) ),
    INDEX i3 ( (JSON_VALUE(items, '$.quantity' RETURNING UNSIGNED)) )
);