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'