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'