Json-dataformatet skapades för att underlätta överföringen av strukturerade data mellan klient och server.
För att konvertera en array eller ett objekt till Json finns funktionen json_encode
i PHP:
$user = ['namn' => 'Jan','efternamn' => 'Barasek','roll' => ['Admin','moderator',],];echo json_encode($user);
Det kommer att generera:
{"name":"Jan","surname":"Barasek","role":["admin","moderator"]}
Funktionen json_encode()
kan också konvertera andra datatyper. Vi kan till exempel direkt infoga integer
(heltal), string
(sträng) och så vidare.
I standardkonfigurationen genereras json som en lång sträng. Detta för att ta upp så lite utrymme som möjligt.
Om du vill ha bättre läsbarhet kan du bara skicka konstanten JSON_PRETTY_PRINT
som den andra parametern:
echo json_encode($users, JSON_PRETTY_PRINT);
Det kommer att generera:
{"namn": "Jan","efternamn": "Barasek","roll": ["Admin","moderator"]}
Den normala formateringen av json via PHP har inga ytterligare inställningar och vi måste nöja oss med denna utskrift. Om vi till exempel vill indela tabulaturer i stället för mellanslag (eller ändra genereringsreglerna på något sätt) måste vi programmera det själva.
Den här funktionen kan redan göra grundläggande formatering och vi behöver bara ändra 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;}
Källa : https://stackoverflow.com/questions/6054033/pretty…
Till exempel:
{"nyckel1":[1,2,3],"key2":"värde"}
Formaterad som:
{"nyckel1": [1,2,3],"key2": "värde"}
Det är mycket lättare att läsa (på grund av den konsekventa indragningen av varje element).
Ibland kan det vara användbart att färgmarkera tangenter, data och enskilda formateringselement (särskilt avslutande parenteser).
Till exempel:
{"tillgång till": {"symbol": {"issued_at": "2008-08-16T14:10:31.309353", "upphör att gälla": "2008-08-17T14:10:31Z", "id": "MIICQgYJKoZIhvcIegeyJpc3N1ZWRfYXQiOiAi"}, "serviceCatalog": [], "användare": {"användarnamn": "ajay", "roller_länkar": [], "id": "16452ca89", "roller": [], "namn": "ajay"}}}
Formaterad som:
{
"access": {
"token": {
"issued_at": "2008-08-16T14:10:31.309353",
"expires": "2008-08-17T14:10:31Z",
"id": "MIICQgYJJKoZIhvcIegeyJpc3N1ZWRfYXQiOiAi"
},
"serviceCatalog": [
],
"user": {
"användarnamn": "ajay",
"roles_links": [
],
: "16452ca89",
"roller": [
],
"name": "ajay"
}
}
}
Detta kan genomföras med hjälp av följande 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);}}// Returnerar HTML-källanreturn '<pre>' . $buffer . '</pre>';}// Kalla bara detta och återge formaterad utdata.// echo jsonColorFormater($data, ' ');
Funktion hämtad och radikalt omskriven från: https://stackoverflow.com/a/20953262/6777550
Detta kan genomföras med funktionen json_decode(), som skapar en datastruktur av Json som vi måste arbeta med som ett objekt:
$json = '{"namn": "Jan", "efternamn": "Barasek", "roll":["admin", "moderator"]}';$decode = json_decode($json);echo $decode->name; // Återger "Jan// echo $decode->role;//// Detta är inte möjligt eftersom egenskapsrollen// innehåller en matris, vi måste iterera.echo '<ul>';foreach ($decode->role as $role) {echo '<li>' . $role . '</li>'; // Listan över de roller som ligger bakom punkterna är löpande.}echo '</ul>';
I jQuery-biblioteket kan till exempel en json-sträng mycket enkelt analyseras till ett objekt:
var json = '{"namn": "Jan", "efternamn": "Barasek", "roll":["admin", "moderator"]}';var parser = $.parseJSON(json);document.write('Namn:' + parser.name);console.log(parser); // Skriver ut hela objektet på konsolen för felsökning.
I javascript är json generellt sett ett giltigt javascriptobjekt som kan bearbetas direkt och vars egenskaper kan nås.
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-2025 | Kontakt | Mapa webu
Status | Aktualizováno: ... | sv