Dans MariaDB, JSON_DETAILED() est une fonction intégrée qui prend un document JSON et le renvoie dans un format plus lisible par l'homme.
On parle parfois d'embellir le document. C'est similaire au JSON_PRETTY() de MySQL fonction.
Pour l'effet inverse (c'est-à-dire pour condenser un document JSON), utilisez le JSON_COMPACT() fonction.
Syntaxe
La syntaxe ressemble à ceci :
JSON_DETAILED(json_doc[, tab_size])
Où json_doc est le document JSON, et tab_size est une valeur facultative qui spécifie la taille des tabulations/retraits.
Exemple
Voici un exemple pour illustrer.
SET @json_document = '{ "name": "Wag", "type": "Dog", "weight": 20 }';
SELECT JSON_DETAILED(@json_document); Résultat :
+----------------------------------------+
| JSON_DETAILED(@json_document) |
+----------------------------------------+
| {
"name": "Wag",
"type": "Dog",
"weight": 20
} |
+----------------------------------------+ Le document d'origine tient sur une seule ligne, sans tabulations/retraits ni autre formatage.
Le résultat est réparti sur plusieurs lignes et contient des tabulations/retraits, ce qui rend le document plus facile à lire pour nous, humains.
Structures imbriquées
Voici quelques exemples supplémentaires, cette fois avec des structures imbriquées :
SET @json_document = '{ "_id" : 1, "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }';
SELECT JSON_DETAILED(@json_document); Résultat :
+---------------------------------------+
| JSON_DETAILED(@json_document) |
+---------------------------------------+
| {
"_id": 1,
"awards":
[
"Top Dog",
"Best Dog",
"Biggest Dog"
]
} |
+---------------------------------------+ Et un autre :
SET @json_document = '{ "_id" : 2, "specs" : { "height" : 400, "weight" : 15, "color" : "brown" } }';
SELECT JSON_DETAILED(@json_document); Résultat :
+---------------------------------------+
| JSON_DETAILED(@json_document) |
+---------------------------------------+
| {
"_id": 2,
"specs":
{
"height": 400,
"weight": 15,
"color": "brown"
}
} |
+---------------------------------------+ Taille de l'onglet
Vous avez également la possibilité de spécifier la taille de l'onglet. Pour ce faire, passez la taille de tabulation souhaitée en deuxième argument.
Exemple
SET @json_document = '{ "_id" : 1, "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }';
SELECT JSON_DETAILED(@json_document, 1); Résultat :
{
"_id": 1,
"awards":
[
"Top Dog",
"Best Dog",
"Biggest Dog"
]
} Et le revoici, mais avec une taille d'onglet plus grande :
SET @json_document = '{ "_id" : 1, "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }';
SELECT JSON_DETAILED(@json_document, 10); Résultat :
{
"_id": 1,
"awards":
[
"Top Dog",
"Best Dog",
"Biggest Dog"
]
} Document JSON plus grand
Voici un exemple avec un document JSON légèrement plus grand.
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_DETAILED(@json_document); Résultat :
{
"_id": 1,
"name": "Wag",
"details":
{
"type": "Dog",
"weight": 20,
"awards":
{
"Florida Dog Awards": "Top Dog",
"New York Marathon": "Fastest Dog",
"Sumo 2020": "Biggest Dog"
}
}
} Argument nul
Si l'argument est NULL , le résultat est NULL :
SELECT JSON_DETAILED(null); Résultat :
+---------------------+ | JSON_DETAILED(null) | +---------------------+ | NULL | +---------------------+
Nombre de paramètres incorrect
Ne fournir aucun argument génère une erreur :
SELECT JSON_DETAILED(); Résultat :
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_DETAILED'
Il en va de même lorsque vous fournissez trop d'arguments :
SELECT JSON_DETAILED('{ "a": 1}', 1, 2); Résultat :
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_DETAILED'