JSON Format Verarbeitung
JSON: Das Datenformat des Webs
JSON (JavaScript Object Notation) ist das Standard-Format für Datenaustausch. Einfach zu lesen, leicht zu parsen – ideal für APIs und Konfigurationsdateien.
Was ist JSON?
JSON ist ein textbasiertes Datenformat, das von JavaScript abgeleitet wurde, aber sprachunabhängig ist. Es ist leichter als XML und menschen-lesbar.
JSON Syntax
Datentypen
{
"string": "Hallo Welt",
"number": 42,
"float": 3.14,
"boolean": true,
"null": null,
"array": [1, 2, 3],
"object": {
"key": "value"
}
}
Regeln
- Keys müssen Strings in doppelten Anführungszeichen sein
- Strings nur mit doppelten Anführungszeichen
- Keine Trailing Commas erlaubt
- Keine Kommentare (Standard-JSON)
- Keine undefined oder Funktionen
Gültiges vs. Ungültiges JSON
// ✅ Gültig
{
"name": "Max",
"age": 30
}
// ❌ Ungültig - Single Quotes
{
'name': 'Max'
}
// ❌ Ungültig - Trailing Comma
{
"name": "Max",
}
// ❌ Ungültig - Unquoted Key
{
name: "Max"
}
JSON in JavaScript
Parsen (String → Objekt)
const jsonString = '{"name": "Max", "age": 30}';
// Parsen
const obj = JSON.parse(jsonString);
console.log(obj.name); // "Max"
// Mit Reviver-Funktion
const data = JSON.parse(jsonString, (key, value) => {
if (key === 'age') return value + 1;
return value;
});
Stringifizieren (Objekt → String)
const obj = { name: "Max", age: 30 };
// Einfach
const json = JSON.stringify(obj);
// '{"name":"Max","age":30}'
// Formatiert (Pretty Print)
const pretty = JSON.stringify(obj, null, 2);
/*
{
"name": "Max",
"age": 30
}
*/
// Mit Replacer (Felder filtern)
const filtered = JSON.stringify(obj, ['name']);
// '{"name":"Max"}'
Deep Clone mit JSON
const original = { a: 1, b: { c: 2 } };
const clone = JSON.parse(JSON.stringify(original));
JSON in Python
import json
# String → Dictionary
json_string = '{"name": "Max", "age": 30}'
data = json.loads(json_string)
print(data['name']) # Max
# Dictionary → String
obj = {"name": "Max", "age": 30}
json_str = json.dumps(obj)
# Formatiert
pretty = json.dumps(obj, indent=2)
# Datei lesen
with open('data.json', 'r') as f:
data = json.load(f)
# Datei schreiben
with open('data.json', 'w') as f:
json.dump(obj, f, indent=2)
JSON in PHP
<?php
// String → Array
$json_string = '{"name": "Max", "age": 30}';
$data = json_decode($json_string, true); // true = assoc array
echo $data['name']; // Max
// Als Objekt
$obj = json_decode($json_string);
echo $obj->name; // Max
// Array → String
$arr = ['name' => 'Max', 'age' => 30];
$json = json_encode($arr);
// Formatiert
$pretty = json_encode($arr, JSON_PRETTY_PRINT);
// Fehlerbehandlung
$data = json_decode($invalid_json);
if (json_last_error() !== JSON_ERROR_NONE) {
echo json_last_error_msg();
}
JSON Schema
JSON Schema definiert die Struktur von JSON-Daten:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"age": {
"type": "integer",
"minimum": 0
},
"email": {
"type": "string",
"format": "email"
}
},
"required": ["name", "email"]
}
JSON vs. Alternativen
| Format | Vorteile | Nachteile |
|---|---|---|
| JSON | Einfach, weit verbreitet, lesbar | Keine Kommentare, verbose |
| YAML | Lesbar, Kommentare, kompakt | Komplexere Syntax, langsamer |
| XML | Schemas, Namespaces | Verbose, komplexer zu parsen |
| TOML | Für Config-Dateien, lesbar | Weniger verbreitet |
Best Practices
- Immer UTF-8 Encoding verwenden
- Datumsangaben als ISO 8601 String
- camelCase oder snake_case konsistent
- JSON validieren vor dem Parsen
- Große Zahlen als String (JavaScript-Limit)
JSON5 und JSONC
Erweiterungen für mehr Komfort:
// JSON5 - erlaubt:
{
// Kommentare
name: 'Max', // Unquoted keys, single quotes
age: 30, // Trailing comma
}
// JSONC (JSON with Comments) - für VS Code settings
{
// Dies ist ein Kommentar
"editor.fontSize": 14
}
Nützliche Tools
- JSONLint: Online-Validator
- jq: Command-Line JSON-Prozessor
- JSON Formatter: Browser-Extensions