MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

MariaDB JSON_DETAILED() expliqué

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])

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'