sql >> Databasteknik >  >> RDS >> MariaDB

MariaDB JSON_DETAILED() Förklarad

I MariaDB, JSON_DETAILED() är en inbyggd funktion som tar ett JSON-dokument och returnerar det i ett mer läsbart format.

Detta kallas ibland för att försköna dokumentet. Det liknar MySQL:s JSON_PRETTY() funktion.

Använd JSON_COMPACT() för motsatt effekt (dvs. för att kondensera ner ett JSON-dokument). funktion.

Syntax

Syntaxen ser ut så här:

JSON_DETAILED(json_doc[, tab_size])

Där json_doc är JSON-dokumentet och tab_size är ett valfritt värde som anger storleken på tabben/indragen.

Exempel

Här är ett exempel att visa.

SET @json_document = '{ "name": "Wag", "type": "Dog", "weight": 20 }';

SELECT JSON_DETAILED(@json_document);

Resultat:

+----------------------------------------+
| JSON_DETAILED(@json_document)          |
+----------------------------------------+
| {
    "name": "Wag",
    "type": "Dog",
    "weight": 20
} |
+----------------------------------------+

Originaldokumentet finns på en rad, utan tabb/indrag eller annan formatering.

Resultatet är spritt över flera rader och innehåller tabbar/indrag, vilket gör dokumentet lättare att läsa för oss människor.

Inkapslade strukturer

Här är ytterligare ett par exempel, den här gången med kapslade strukturer:

SET @json_document = '{ "_id" : 1, "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }';

SELECT JSON_DETAILED(@json_document);

Resultat:

+---------------------------------------+
| JSON_DETAILED(@json_document)         |
+---------------------------------------+
| {
    "_id": 1,
    "awards": 
    [
        "Top Dog",
        "Best Dog",
        "Biggest Dog"
    ]
} |
+---------------------------------------+

Och en annan:

SET @json_document = '{ "_id" : 2, "specs" : { "height" : 400, "weight" : 15, "color" : "brown" } }';

SELECT JSON_DETAILED(@json_document);

Resultat:

+---------------------------------------+
| JSON_DETAILED(@json_document)         |
+---------------------------------------+
| {
    "_id": 2,
    "specs": 
    {
        "height": 400,
        "weight": 15,
        "color": "brown"
    }
} |
+---------------------------------------+

Flikstorlek

Du har också möjlighet att ange flikstorleken. För att göra detta, skicka önskad flikstorlek som ett andra argument.

Exempel

SET @json_document = '{ "_id" : 1, "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }';

SELECT JSON_DETAILED(@json_document, 1);

Resultat:

{
 "_id": 1,
 "awards": 
 [
  "Top Dog",
  "Best Dog",
  "Biggest Dog"
 ]
}

Och här är den igen, men med en större flikstorlek:

SET @json_document = '{ "_id" : 1, "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }';

SELECT JSON_DETAILED(@json_document, 10);

Resultat:

{
        "_id": 1,
        "awards": 
        [
                "Top Dog",
                "Best Dog",
                "Biggest Dog"
        ]
}

Större JSON-dokument

Här är ett exempel med ett lite större JSON-dokument.

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

Resultat:

{
    "_id": 1,
    "name": "Wag",
    "details": 
    {
        "type": "Dog",
        "weight": 20,
        "awards": 
        {
            "Florida Dog Awards": "Top Dog",
            "New York Marathon": "Fastest Dog",
            "Sumo 2020": "Biggest Dog"
        }
    }
}

Nollargument

Om argumentet är NULL , resultatet är NULL :

SELECT JSON_DETAILED(null);

Resultat:

+---------------------+
| JSON_DETAILED(null) |
+---------------------+
| NULL                |
+---------------------+

Felaktig parameterräkning

Att inte tillhandahålla några argument resulterar i ett fel:

SELECT JSON_DETAILED();

Resultat:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_DETAILED'

Det är samma sak när du ger för många argument:

SELECT JSON_DETAILED('{ "a": 1}', 1, 2);

Resultat:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_DETAILED'

  1. Skapar du en loggningshanterare för att ansluta till Oracle?

  2. Hur skriver man en skiftlägesokänslig fråga för både MySQL och Postgres?

  3. Logiska databassäkerhetskopieringar med MySQL-skal

  4. ORA-00903:ogiltigt tabellnamn på PreparedStatement