Wie man JSON in PHP schön ausgibt: Ein vollständiger Leitfaden für Anfänger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum „schmutziges“ JSON der Feind jedes Entwicklers ist

\n\n

Stellen Sie sich vor: Sie schreiben eine API in PHP, geben Daten im JSON-Format zurück, öffnen das Ergebnis im Browser oder in der Konsole – und sehen eine einzige durchgehende Zeile ohne ein einziges Leerzeichen:

\n\n
{"users":[{"id":1,"name":"Ivan","email":"ivan@example.com"},{"id":2,"name":"Maria","email":"maria@example.com"}]}
\n\n

Die Augen schweifen ab, das gewünschte Feld ist nicht zu finden, und wenn das JSON einen Fehler enthält, werden Sie stundenlang danach suchen. Kommt Ihnen das bekannt vor? Deshalb hat die Frage „Pretty-Printing JSON with PHP“ auf Stack Overflow tausende Aufrufe. Heute werden wir ein für alle Mal klären, wie Sie JSON mit PHP lesbar, strukturiert und schön machen.

\n\n

In diesem Artikel erfahren Sie:

\n
    \n
  • Was Pretty-Printing ist und warum es nützlich ist
  • \n
  • Wie Sie die eingebaute Funktion json_encode mit Flags verwenden
  • \n
  • Wie Sie JSON für Debugging, Logs und die Ausgabe im Browser formatieren
  • \n
  • Zusätzliche Techniken: rekursive Formatierung, Arbeit mit Unicode und Komprimierung
  • \n
\n\n

Los geht's!

\n\n

Was ist Pretty-Printing von JSON?

\n\n

Pretty-Printing (vom Englischen „schöner Druck“) ist die Formatierung von Daten mit Einrückungen, Zeilenumbrüchen und Ausrichtung, damit ein Mensch die Struktur leicht lesen kann. Im Fall von JSON verwandelt es das „Durcheinander“ in eine saubere Hierarchie:

\n\n
{\n    "users": [\n        {\n            "id": 1,\n            "name": "Ivan",\n            "email": "ivan@example.com"\n        },\n        {\n            "id": 2,\n            "name": "Maria",\n            "email": "maria@example.com"\n        }\n    ]\n}
\n\n

Geben Sie zu, so ist es viel angenehmer zu arbeiten! PHP bietet dafür eingebaute Werkzeuge, die keine Installation zusätzlicher Bibliotheken erfordern.

\n\n

Die grundlegende Methode: json_encode mit dem Flag JSON_PRETTY_PRINT

\n\n

Die einfachste und gebräuchlichste Methode ist die Verwendung des zweiten Parameters der Funktion json_encode(), indem Sie die Konstante JSON_PRETTY_PRINT übergeben. Hier ist ein einfaches Beispiel:

\n\n
<?php\n$data = [\n    'name' => 'PythonLib',\n    'type' => 'educational',\n    'topics' => ['PHP', 'Python', 'JavaScript'],\n    'stats' => [\n        'visitors' => 15000,\n        'rating' => 4.8\n    ]\n];\n\n$prettyJson = json_encode($data, JSON_PRETTY_PRINT);\necho $prettyJson;\n?>
\n\n

Ergebnis:

\n\n
{\n    "name": "PythonLib",\n    "type": "educational",\n    "topics": [\n        "PHP",\n        "Python",\n        "JavaScript"\n    ],\n    "stats": {\n        "visitors": 15000,\n        "rating": 4.8\n    }\n}
\n\n

Beachten Sie: Die Schlüssel werden in alphabetischer Reihenfolge sortiert. Wenn Sie die ursprüngliche Reihenfolge beibehalten möchten, verwenden Sie das Flag JSON_PRESERVE_ZERO_FRACTION (für Gleitkommazahlen) oder sortieren Sie das Array manuell.

\n\n

Kombinieren von Flags

\n\n

Sie können mehrere Flags mit | (bitweises ODER) übergeben. Um beispielsweise gleichzeitig zu formatieren und Unicode-Zeichen zu escapen:

\n\n
$json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);\necho $json;
\n\n

Das Flag JSON_UNESCAPED_UNICODE bewahrt kyrillische und andere Zeichen in lesbarer Form, anstatt sie als \\u0438\\u0432\\u0430\\u043d darzustellen. Dies ist besonders nützlich für russischsprachige Websites.

\n\n

Wie man Pretty-Printed JSON im Browser ausgibt

\n\n

Wenn Sie eine API entwickeln und möchten, dass JSON direkt im Browser schön angezeigt wird (z. B. beim Debugging), verwenden Sie den Header Content-Type: application/json zusammen mit der Formatierung:

\n\n
<?php\nheader('Content-Type: application/json; charset=utf-8');\n\n$response = [\n    'status' => 'success',\n    'data' => [\n        'message' => 'Hallo, Welt!',\n        'code' => 200\n    ]\n];\n\necho                

Blogs

Buchempfehlungen