← Alle Artikel

JSON formatieren: pretty-printen, validieren und JSON-Dateien aufräumen

JSON mit JSON.stringify in JavaScript, json.dumps in Python, jq auf der Kommandozeile oder direkt im Browser formatieren. Inklusive Schlüssel sortieren, YAML und CSV nach JSON konvertieren und echten Vorher/Nachher-Beispielen.

Rohes JSON aus einer API oder einer Log-Datei kommt oft in einer einzigen ununterbrochenen Zeile —— gültig, aber auf einen Blick unleserlich. JSON zu formatieren (auch „pretty-print“ oder „verschönern“ genannt) fügt konsistente Einrückung und Zeilenumbrüche hinzu, sodass die Struktur sofort klar wird. Dieser Guide zeigt, wie Sie eine JSON-Datei oder -Zeichenkette in JavaScript, Python, der Kommandozeile und direkt im Browser formatieren.

Was bedeutet „JSON formatieren“?

Ein JSON-Formatter nimmt eine kompakte oder inkonsistent eingerückte JSON-Zeichenkette und schreibt sie neu mit:

  • Jedem Schlüssel-Wert-Paar in einer eigenen Zeile
  • Verschachtelten Objekten und Arrays mit fester Anzahl Leerzeichen (üblicherweise 2 oder 4)
  • Ohne Leerzeichen am Zeilenende
// Vor dem Formatieren (minified)
{"user":{"name":"Alice","age":30,"roles":["admin","editor"]}}

// Nach dem Formatieren (2 Leerzeichen)
{
  "user": {
    "name": "Alice",
    "age": 30,
    "roles": [
      "admin",
      "editor"
    ]
  }
}

Beide Formen sind semantisch identisch —— jeder JSON-Parser erzeugt aus beiden dieselbe Datenstruktur. Formatieren dient rein der menschlichen Lesbarkeit.

JSON in JavaScript formatieren

JSON.stringify() akzeptiert ein zweites Argument (einen Replacer) und ein drittes (die Einrückungsstufe). Übergeben Sie null als Replacer und 2 für 2 Leerzeichen Einrückung (die vollständige API in JSON.stringify – so funktioniert es):

const obj = { user: { name: "Alice", age: 30, roles: ["admin", "editor"] } };

// Kompakt (kein Formatieren)
JSON.stringify(obj);

// Verschönert mit 2 Leerzeichen
JSON.stringify(obj, null, 2);

// 4 Leerzeichen
JSON.stringify(obj, null, 4);

// Tabulator
JSON.stringify(obj, null, '\t');

Eine JSON-Zeichenkette formatieren (kein Objekt)

Wenn Sie bereits eine gültige, aber schlecht formatierte JSON-Zeichenkette haben, parsen Sie zuerst und stringifizieren Sie erneut:

const raw = '{"name":"Alice","age":30}';
const formatted = JSON.stringify(JSON.parse(raw), null, 2);
console.log(formatted);

Schlüssel alphabetisch sortieren

Um Objektschlüssel beim Formatieren zu sortieren, übergeben Sie eine Replacer-Funktion, die die Schlüssel jedes gefundenen Objekts sortiert:

function sortedStringify(obj, indent = 2) {
  return JSON.stringify(obj, (key, value) => {
    if (value && typeof value === 'object' && !Array.isArray(value)) {
      return Object.keys(value).sort().reduce((acc, k) => {
        acc[k] = value[k];
        return acc;
      }, {});
    }
    return value;
  }, indent);
}

JSON in Python formatieren

Pythons eingebautes json-Modul kümmert sich um das Formatieren mit dem Parameter indent:

import json

# Ein Python-Dict formatieren
data = {"user": {"name": "Alice", "age": 30, "roles": ["admin", "editor"]}}
formatted = json.dumps(data, indent=2)
print(formatted)

# Eine JSON-Zeichenkette formatieren
raw = '{"name":"Alice","age":30}'
formatted = json.dumps(json.loads(raw), indent=2)

# Schlüssel sortieren
formatted = json.dumps(data, indent=2, sort_keys=True)

# Eine JSON-Datei formatieren
with open('input.json') as f:
    data = json.load(f)
with open('output.json', 'w') as f:
    json.dump(data, f, indent=2)

Eine JSON-Datei auf der Kommandozeile formatieren

Mit jq (empfohlen)

jq ist der Standard-JSON-Prozessor auf der Kommandozeile. Er formatiert JSON standardmäßig:

# JSON-Datei verschönern
jq . input.json

# Verschönern und in eine andere Datei speichern
jq . input.json > output.json

# curl-Antwort formatieren
curl -s https://api.example.com/users | jq .

# Schlüssel sortieren
jq --sort-keys . input.json

Mit Python (ohne Installation)

Pythons Modul json.tool funktioniert als Kommandozeilen-Formatter auf jedem System mit Python:

# Eine Datei formatieren
python3 -m json.tool input.json

# Von stdin
echo '{"name":"Alice","age":30}' | python3 -m json.tool

# Schlüssel sortieren
python3 -m json.tool --sort-keys input.json

Mit Node.js

node -e "const fs=require('fs'); const d=JSON.parse(fs.readFileSync('input.json')); console.log(JSON.stringify(d,null,2))"

Daten in JSON-Format konvertieren

„Format to JSON“ bedeutet meist, Daten aus einem anderen Format —— ein Python-Dict, eine CSV-Datei, eine YAML-Konfiguration —— in gültiges JSON zu serialisieren.

Von YAML zu JSON

# Python
import yaml, json
with open('config.yaml') as f:
    data = yaml.safe_load(f)
print(json.dumps(data, indent=2))

Oder benutzen Sie den YAML-zu-JSON-Konverter im Browser —— ohne Code. Wann welches Format zu wählen ist, siehe JSON vs YAML; den Hintergrund, warum YAML 1.2 eine echte Obermenge von JSON ist, siehe YAML 1.2 JSON-Kompatibilität.

Von CSV zu JSON

import csv, json
with open('data.csv') as f:
    rows = list(csv.DictReader(f))
print(json.dumps(rows, indent=2))

Von einem JavaScript-Objekt

JavaScript-Objekte sehen wie JSON aus, sind es aber nicht —— sie können unzitierte Schlüssel, Strings mit einfachen Anführungszeichen, Trailing Commas und Kommentare haben. Fügen Sie ein ungültiges JavaScript-Objekt-Literal in JSON Fix ein, um es automatisch in gültiges JSON umzuwandeln.

JSON im Editor formatieren (Prettier, VS Code, pre-commit)

Im Alltag ist der nützlichste Moment, JSON zu formatieren, beim Speichern —— so landet es nie unformatiert in git oder in einem PR.

Prettier

# installieren
npm i -D prettier

# jede .json (und Quelle) in-place formatieren
npx prettier --write "**/*.{json,jsonc}"

# nur prüfen (CI-freundlich, Exit-Code ungleich Null wenn etwas zu formatieren ist)
npx prettier --check "**/*.json"

Prettier unterstützt JSON und JSONC out of the box. Eine zweizeilige .prettierrc wie { "tabWidth": 2 } reicht meist.

VS Code —— Format on Save

Installieren Sie die Prettier-Extension und fügen Sie zur Workspace-settings.json hinzu:

{
  "editor.formatOnSave": true,
  "[json]":   { "editor.defaultFormatter": "esbenp.prettier-vscode" },
  "[jsonc]":  { "editor.defaultFormatter": "esbenp.prettier-vscode" }
}

Pre-Commit-Hook

Um zu verhindern, dass unformatiertes JSON committet wird, koppeln Sie lint-staged + husky:

// package.json
{
  "lint-staged": { "*.{json,jsonc}": "prettier --write" }
}

# Hook installieren
npx husky add .husky/pre-commit "npx lint-staged"

JSON-Format-Beispiel: vorher und nachher

// Unformatiert —— gültig aber unlesbar
{"orders":[{"id":1001,"customer":{"name":"Alice"},"items":[{"sku":"A1","qty":2}]}]}

// Formatiert
{
  "orders": [
    {
      "id": 1001,
      "customer": { "name": "Alice" },
      "items": [ { "sku": "A1", "qty": 2 } ]
    }
  ]
}

Häufig gestellte Fragen

Wie formatiere ich JSON in JavaScript?

Verwenden Sie JSON.stringify(value, null, 2) —— das dritte Argument legt die Einrückung fest (2 Leerzeichen, 4 Leerzeichen oder '\t' für Tabulatoren). Um eine bestehende JSON-Zeichenkette zu formatieren, parsen Sie zuerst: JSON.stringify(JSON.parse(raw), null, 2).

Wie mache ich Pretty-Print von JSON auf der Kommandozeile?

Verwenden Sie jq . file.json (formatiert standardmäßig) oder python3 -m json.tool file.json, falls Sie kein jq haben. Fügen Sie --sort-keys hinzu, um Schlüssel alphabetisch zu sortieren.

Was ist der Unterschied zwischen JSON formatieren und minifizieren?

Formatieren fügt Leerzeichen für bessere Lesbarkeit hinzu; minifizieren entfernt sie, um die Größe zu reduzieren. Sie sind exakte Gegenstücke und beide erhalten die Daten. Siehe JSON minifizieren.

Verändert das Formatieren von JSON die Daten?

Nein. Einrückung und Zeilenumbrüche sind in JSON bedeutungsloser Whitespace —— jeder Parser erzeugt aus kompakter oder verschönerter Eingabe dieselbe Datenstruktur.

JSON online formatieren —— ohne Installation

Wenn Sie jetzt eine JSON-Zeichenkette formatieren müssen, ohne Code zu schreiben, formatiert JSON Fix Ihr JSON sofort. Fügen Sie das JSON ein, klicken Sie auf Format und kopieren Sie das Ergebnis. Es repariert auch häufige Fehler (Trailing Commas, einfache Anführungszeichen, unzitierte Schlüssel) vor dem Formatieren, sodass es auch funktioniert, wenn Ihr JSON noch nicht gültig ist.