Das Json-Datenformat wurde entwickelt, um die Übertragung von strukturierten Daten zwischen Client und Server zu erleichtern.
Um ein Array oder Objekt in Json zu konvertieren, gibt es in PHP die Funktion json_encode
:
$user = ['Name' => 'Jan','Nachname' => 'Barasek','Rolle' => ['Verwaltung','Moderatorin',],];echo json_encode($user);
Das wird etwas bewirken:
{"name":"Jan","surname":"Barasek","role":["admin","moderator"]}
Die Funktion json_encode()
kann auch andere Datentypen konvertieren. Zum Beispiel können wir direkt integer
(Ganzzahl), string
(Zeichenkette) und so weiter einfügen.
In der Standardkonfiguration wird json als eine lange Zeichenkette erzeugt. Der Grund dafür ist, dass sie so wenig Platz wie möglich einnehmen sollen.
Wenn Sie eine bessere Lesbarkeit benötigen, übergeben Sie einfach die Konstante JSON_PRETTY_PRINT
als zweiten Parameter:
echo json_encode($users, JSON_PRETTY_PRINT);
Das wird etwas bewirken:
{"Name": "Jan","Nachname": "Barasek","Rolle": ["Verwaltung","Moderatorin"]}
Die normale Formatierung von json über PHP hat keine zusätzlichen Einstellungen und wir müssen uns mit dieser Ausgabe begnügen. Wenn wir beispielsweise Tabulatoren anstelle von Leerzeichen einrücken wollen (oder die Generierungsregeln in irgendeiner Weise ändern wollen), müssen wir dies selbst programmieren.
Diese Funktion kann bereits grundlegende Formatierungen vornehmen, wir müssen sie nur noch anpassen:
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;}
Quelle: https://stackoverflow.com/questions/6054033/pretty…
Zum Beispiel: Eingabe:
{"Taste1":[1,2,3],"Taste2":"Wert"}
Formatiert als:
{"Taste1": [1,2,3],"Taste2": "Wert"}
Das ist viel einfacher zu lesen (wegen der einheitlichen Einrückung der einzelnen Elemente).
Manchmal kann es sinnvoll sein, Tasten, die Daten selbst und einzelne Formatierungselemente (insbesondere schließende Klammern) farblich hervorzuheben.
Zum Beispiel: Eingabe:
{"Zugang": {"Token": {"ausgestellt_am": "2008-08-16T14:10:31.309353", "Läuft ab": "2008-08-17T14:10:31Z", "id": "MIICQgYJKoZIhvcIegeyJpc3N1ZWRfYXQiOiAi"}, "serviceKatalog": [], "Benutzer": {"Nutzername": "ajay", "rollen_links": [], "id": "16452ca89", "Rollen": [], "Name": "ajay"}}}
Formatiert als:
{
"access": {
"token": {
"issued_at": "2008-08-16T14:10:31.309353",
"läuft ab": "2008-08-17T14:10:31Z",
"id": "MIICQgYJKoZIhvcIegeyJpc3N1ZWRfYXQiOiAi"
},
"serviceCatalog": [
],
"user": {
"username": "ajay",
"roles_links": [
],
: "16452ca89",
"Rollen": [
],
"name": "ajay"
}
}
}
Dies kann durch die folgende Funktion realisiert werden:
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);}}// Gibt HTML-Quelle zurückreturn '<pre>' . $buffer . '</pre>';}// Rufen Sie dies einfach auf und geben Sie eine formatierte Ausgabe zurück// echo jsonColorFormater($data, ' ');
Feature übernommen und radikal umgeschrieben von: https://stackoverflow.com/a/20953262/6777550
Dies kann mit der Funktion json_decode() realisiert werden, die aus Json eine Datenstruktur macht, mit der wir als Objekt arbeiten müssen:
$json = '{"Name": "Jan", "Nachname": "Barasek", "Rolle":["admin", "moderator"]}';$decode = json_decode($json);echo $decode->name; // Gibt 'Jan' zurück// echo $decode->role;//// Dies ist nicht möglich, da die Eigenschaftsrolle// ein Array enthält, müssen wir iterieren.echo '<ul>';foreach ($decode->role as $role) {echo '<li>' . $role . '</li>'; // Führt die Rollen hinter den Aufzählungszeichen fortlaufend auf}echo '</ul>';
In der jQuery-Bibliothek kann beispielsweise eine json-Zeichenkette sehr einfach in ein Objekt geparst werden:
var json = '{"Name": "Jan", "Nachname": "Barasek", "Rolle":["admin", "moderator"]}';var parser = $.parseJSON(json);document.write('Name:' + parser.name);console.log(parser); // Druckt das gesamte Objekt zur Fehlersuche auf der Konsole aus
In Javascript, im Allgemeinen, ist jede json ein gültiges Javascript-Objekt, das mit direkt gearbeitet werden kann und seine Eigenschaften zugegriffen.
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: ... | de