Einleitung: Warum „schmutziges“ JSON der Feind jedes Entwicklers ist
\n\nStellen 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\nDie 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\nIn diesem Artikel erfahren Sie:
\n- \n
- Was Pretty-Printing ist und warum es nützlich ist \n
- Wie Sie die eingebaute Funktion
json_encodemit 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
Los geht's!
\n\nWas ist Pretty-Printing von JSON?
\n\nPretty-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\nGeben Sie zu, so ist es viel angenehmer zu arbeiten! PHP bietet dafür eingebaute Werkzeuge, die keine Installation zusätzlicher Bibliotheken erfordern.
\n\nDie grundlegende Methode: json_encode mit dem Flag JSON_PRETTY_PRINT
\n\nDie 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:
<?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\nErgebnis:
\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\nBeachten 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.
Kombinieren von Flags
\n\nSie können mehrere Flags mit | (bitweises ODER) übergeben. Um beispielsweise gleichzeitig zu formatieren und Unicode-Zeichen zu escapen:
$json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);\necho $json;\n\nDas 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.
Wie man Pretty-Printed JSON im Browser ausgibt
\n\nWenn 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:
<?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