PHP Manual
/
Datenstrukturen

Json in PHP - Verarbeitung, Erzeugung und Formatierung

26. 11. 2019

Obsah článku

Das Json-Datenformat wurde entwickelt, um die Übertragung von strukturierten Daten zwischen Client und Server zu erleichtern.

Konvertierung eines Arrays oder Objekts in json

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.

Json pretty print - bessere Lesbarkeit für Menschen

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"
]
}

Formatierung von json - benutzerdefinierte Formatierungsregeln

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).

Json-Notation als HTML einfärben

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ück
return '<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

Konvertierung von JSON in PHP-Array/Objekt

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>';

Verarbeitung in javascript

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:

Související články

1.
Status:
All systems normal.
2024