I MariaDB, JSON_DETAILED()
er en indbygget funktion, der tager et JSON-dokument og returnerer det i et mere menneskeligt læsbart format.
Dette omtales nogle gange som at forskønne dokumentet. Det ligner MySQL's JSON_PRETTY()
funktion.
For den modsatte effekt (dvs. at kondensere et JSON-dokument ned), skal du bruge JSON_COMPACT()
funktion.
Syntaks
Syntaksen ser sådan ud:
JSON_DETAILED(json_doc[, tab_size])
Hvor json_doc
er JSON-dokumentet og tab_size
er en valgfri værdi, der angiver størrelsen på fanen/indrykningen.
Eksempel
Her er et eksempel til at demonstrere.
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 } | +----------------------------------------+
Det originale dokument er alt på én linje, uden tabulatorer/indrykninger eller anden formatering.
Resultatet er spredt over flere linjer og indeholder tabulatorer/indrykninger, hvilket gør dokumentet lettere at læse for os mennesker.
Indlejrede strukturer
Her er et par eksempler mere, denne gang med indlejrede 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" ] } | +---------------------------------------+
Og en anden:
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" } } | +---------------------------------------+
Fanestørrelse
Du har også mulighed for at angive fanestørrelsen. For at gøre dette skal du sende den ønskede fanestørrelse som et andet argument.
Eksempel
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" ] }
Og her er den igen, men med en større fanestørrelse:
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
Her er et eksempel med et lidt 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" } } }
Nul-argument
Hvis argumentet er NULL
, resultatet er NULL
:
SELECT JSON_DETAILED(null);
Resultat:
+---------------------+ | JSON_DETAILED(null) | +---------------------+ | NULL | +---------------------+
Forkert parameterantal
Angivelse af ingen argumenter resulterer i en fejl:
SELECT JSON_DETAILED();
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_DETAILED'
Det er det samme, når du giver for mange argumenter:
SELECT JSON_DETAILED('{ "a": 1}', 1, 2);
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_DETAILED'