Json-dataformatet blev skabt for at lette overførslen af strukturerede data mellem klient og server.
For at konvertere et array eller objekt til Json findes der en funktion json_encode
i PHP:
$user = ['navn' => 'Jan','efternavn' => 'Barasek','rolle' => ['Admin','moderator',],];echo json_encode($user);
Det vil generere:
{"name":"Jan","surname":"Barasek","role":["admin","moderator"]}
Funktionen json_encode()
kan også konvertere andre datatyper. Vi kan f.eks. direkte indsætte integer
(heltal), string
(streng) osv.
I standardkonfigurationen genereres json som én lang streng. Dette er for at optage så lidt plads som muligt.
Hvis du har brug for bedre læsbarhed, skal du blot sende konstanten JSON_PRETTY_PRINT
som den anden parameter:
echo json_encode($users, JSON_PRETTY_PRINT);
Det vil generere:
{"navn": "Jan","efternavn": "Barasek","rolle": ["Admin","moderator"]}
Den normale formatering af json via PHP har ingen yderligere indstillinger, og vi er nødt til at nøjes med dette output. Hvis vi f.eks. ønsker at indrykke tabulatorer i stedet for mellemrum (eller ændre genereringsreglerne på nogen måde), skal vi selv programmere det.
Denne funktion kan allerede lave grundlæggende formatering, og vi skal blot ændre den:
function prettyJsonPrint(string $json): string{$result = '';$level = 0;$in_quotes = false;$in_escape = false;$ends_line_level = NULL;$json_length = strlen($json);for ($i = 0; $i < $json_length; $i++) {$char = $json[$i];$new_line_level = NULL;$post = '';if ($ends_line_level !== NULL) {$new_line_level = $ends_line_level;$ends_line_level = NULL;}if ($in_escape) {$in_escape = false;} else if ($char === '"') {$in_quotes = !$in_quotes;} else if (!$in_quotes) {switch ($char) {case '}':case ']':$level--;$ends_line_level = NULL;$new_line_level = $level;break;case '{':case '[':$level++;case ',':$ends_line_level = $level;break;case ':':$post = '';break;case "":case "\t":case "\n":case "\r":$char = '';$ends_line_level = $new_line_level;$new_line_level = NULL;break;}} else if ($char === '\\') {$in_escape = true;}if ($new_line_level !== NULL) {$result .= "\n" . str_repeat("\t", $new_line_level);}$result .= $char . $post;}return $result;}
Kilde : https://stackoverflow.com/questions/6054033/pretty…
For eksempel, input:
{"nøgle1":[1,2,3],"key2":"værdi"}
Formateret som:
{"nøgle1": [1,2,3],"key2": "værdi"}
Hvilket er meget lettere at læse (på grund af den konsekvente indrykning af hvert element).
Nogle gange kan det være nyttigt at fremhæve taster, selve dataene og individuelle formateringselementer (især lukkende parenteser) med farve.
For eksempel, input:
{"adgang": {"symbolsk": {"issued_at": "2008-08-16T14:10:31.309353", "udløber": "2008-08-17T14:10:31Z", "id": "MIICQgYJKoZIhvcIegeyJpc3N1ZWRfYXQiOiOiAi"}, "serviceCatalog": [], "bruger": {"brugernavn": "ajay", "roller_links": [], "id": "16452ca89", "roller": [], "navn": "ajay"}}}
Formateret som:
{
"access": {
"token": {
"issued_at": "2008-08-16T14:10:31.309353",
"udløber": "2008-08-17T14:10:31Z",
"id": "MIICQgYJKoZoZIhvcIegeyJpc3N1ZWRfYXQiOiAi"
},
"serviceCatalog": [
],
"user": {
"brugernavn": "ajay",
"roles_links": [
],
: "16452ca89",
"roller": [
],
"name": "ajay"
}
}
}
Dette kan gennemføres ved hjælp af følgende funktion:
function jsonColorFormater(string $json, string $indentation = "\t"): string{$crl = 0;$ss = false;$buffer = '';for ($c = 0; $c < strlen($json); $c++) {if ($json[$c] == '}' || $json[$c] == ']') {$crl--;$buffer .= "\n" . str_repeat($indentation, $crl);}if ($json[$c] == '"' && (@$json[$c - 1] == ',' || @$json[$c - 2] == ',')) {$buffer .= "\n" . str_repeat($indentation, $crl);}if ($json[$c] == '"' && !$ss) {$buffer .= '<span style="color:'.((@$json[$c - 1] == ':' || @$json[$c - 2] == ':') ? '#35D' : '#C22').';">';}$buffer .= $json[$c];if ($json[$c] == '"' && $ss) $buffer .= '</span>';if ($json[$c] == '"') $ss = !$ss;if ($json[$c] == '{' || $json[$c] == '[') {$crl++;$buffer .= "\n". str_repeat($indentation, $crl);}}// Returnerer HTML-kildereturn '<pre>' . $buffer . '</pre>';}// Kald bare dette og returnerer formateret output// echo jsonColorFormater($data, ' ' ');
Funktion taget og radikalt omskrevet fra: https://stackoverflow.com/a/20953262/6777550
Dette kan implementeres med funktionen json_decode(), som laver en datastruktur ud af Json, som vi skal arbejde med som et objekt:
$json = '{"name": "Jan", "efternavn": "Barasek", "role":["admin", "moderator"]}';$decode = json_decode($json);echo $decode->name; // Returnerer "Jan// echo $decode->role;//// Dette er ikke muligt, fordi egenskabsrollen// indeholder et array, vi skal iterere.echo '<ul>';foreach ($decode->role as $role) {echo '<li>' . $role . '</li>'; // Lister fortløbende de roller, der ligger bag kuglerne}echo '</ul>';
I jQuery-biblioteket kan en json-streng f.eks. meget let analyseres til et objekt:
var json = '{"name": "Jan", "efternavn": "Barasek", "role":["admin", "moderator"]}';var parser = $.parseJSON(json);document.write('Navn:' + parser.name);console.log(parser); // Udskriver hele objektet til konsollen til fejlfinding
I javascript er json generelt et gyldigt javascript-objekt, som der kan arbejdes direkte med, og som man kan få adgang til dets egenskaber.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | da