Dans MariaDB, JSON_KEYS()
est une fonction intégrée qui renvoie un tableau des clés de niveau supérieur d'un document JSON. Si un chemin est fourni, il renvoie les clés de niveau supérieur de ce chemin.
Il exclut les clés des sous-objets imbriqués dans le niveau spécifié.
De plus, si l'objet sélectionné est vide, un tableau vide est renvoyé.
Syntaxe
La syntaxe ressemble à ceci :
JSON_KEYS(json_doc[, path])
Où json_doc
est le document JSON, et path
est un chemin dans le document.
Exemple
Voici un exemple pour illustrer.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_KEYS(@json_document);
Résultat :
+----------------------------+ | JSON_KEYS(@json_document) | +----------------------------+ | ["name", "type", "weight"] | +----------------------------+
Spécifier un chemin
Voici un exemple de spécification d'un chemin dans le document :
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_KEYS(
@json_document,
'$.details'
) AS Result;
Résultat :
+------------------------------+ | Result | +------------------------------+ | ["type", "weight", "awards"] | +------------------------------+
Comme mentionné, les sous-objets sont exclus du résultat.
Chemins inexistants
Passer un chemin qui n'existe pas dans le document JSON donne NULL
.
Exemple :
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_KEYS(
@json_document,
'$.wrong'
) AS Result;
Résultat :
+--------+ | Result | +--------+ | NULL | +--------+
Objets vides
Si l'objet sélectionné est vide, un tableau vide est renvoyé :
SELECT JSON_KEYS('{}');
Résultat :
+-----------------+ | JSON_KEYS('{}') | +-----------------+ | [] | +-----------------+
Arguments nuls
Si un argument est NULL
, le résultat est NULL
:
SELECT
JSON_KEYS(null),
JSON_KEYS(null, '$.type'),
JSON_KEYS('{"a":1}', null);
Résultat :
+-----------------+---------------------------+----------------------------+ | JSON_KEYS(null) | JSON_KEYS(null, '$.type') | JSON_KEYS('{"a":1}', null) | +-----------------+---------------------------+----------------------------+ | NULL | NULL | NULL | +-----------------+---------------------------+----------------------------+
Nombre de paramètres incorrect
Ne fournir aucun argument génère une erreur :
SELECT JSON_KEYS();
Résultat :
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_KEYS'
Il en va de même lorsque vous fournissez trop ou trop peu d'arguments :
SELECT JSON_KEYS('{ "a": 1}', 1, 2);
Résultat :
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_KEYS'