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'