JSON, YAML und TOML sind die drei beliebtesten Konfigurationsformate in der Softwareentwicklung. Jedes hat eigene StĂ€rken und Kompromisse. Dieser Leitfaden bietet einen umfassenden Vergleich, um das richtige Format fĂŒr Ihr Projekt zu wĂ€hlen.
Konvertieren Sie sofort zwischen JSON und YAML â
Ăbersicht der Formate
JSON (JavaScript Object Notation)
JSON wurde Anfang der 2000er von Douglas Crockford eingefĂŒhrt. Es ist der De-facto-Standard fĂŒr Web-APIs, package.json, tsconfig.json und Datenaustausch.
YAML (YAML Ain't Markup Language)
YAML wurde 2001 vorgeschlagen und fĂŒr menschliche Lesbarkeit entworfen. Es wird in Docker Compose, Kubernetes, Ansible und CI/CD-Pipelines verwendet.
TOML (Tom's Obvious Minimal Language)
TOML wurde 2013 von Tom Preston-Werner als minimales und eindeutiges Konfigurationsformat erstellt. Standard fĂŒr Rust (Cargo.toml), Python (pyproject.toml) und Hugo.
Syntaxvergleich
Hier ist die gleiche Konfiguration in allen drei Formaten:
JSON
{
"server": {
"host": "localhost",
"port": 8080,
"debug": true
},
"database": {
"host": "db.example.com",
"port": 5432,
"name": "myapp",
"credentials": {
"username": "admin",
"password": "secret"
}
},
"features": ["auth", "logging", "cache"],
"max_connections": 100
}YAML
# Server configuration
server:
host: localhost
port: 8080
debug: true
# Database settings
database:
host: db.example.com
port: 5432
name: myapp
credentials:
username: admin
password: secret
features:
- auth
- logging
- cache
max_connections: 100TOML
# Server configuration
max_connections = 100
features = ["auth", "logging", "cache"]
[server]
host = "localhost"
port = 8080
debug = true
[database]
host = "db.example.com"
port = 5432
name = "myapp"
[database.credentials]
username = "admin"
password = "secret"Funktionsvergleich
| Eigenschaft | JSON | YAML | TOML |
|---|---|---|---|
| Kommentare | Nein | Ja (#) | Ja (#) |
| Datentypen | string, number, boolean, null, array, object | string, int, float, bool, null, date, array, map + Tags | string, integer, float, boolean, datetime, array, table |
| Lesbarkeit | Mittel â Klammern und AnfĂŒhrungszeichen erhöhen das Rauschen | Hoch â saubere einrĂŒckungsbasierte Syntax | Hoch â INI-Ă€hnlich, explizite Abschnitte |
| Strenge | Sehr streng â keine abschlieĂenden Kommas oder Kommentare | Locker â implizite Typisierung verursacht Ăberraschungen | Streng â explizite Typen, minimale Mehrdeutigkeit |
| Tool-UnterstĂŒtzung | Hervorragend â universelle Parser-UnterstĂŒtzung | Gut â Parser in allen Hauptsprachen | Gut â wachsend, stark in Rust/Python/Go |
| Mehrzeilige Strings | Nein (\n verwenden) | Ja (| literal, > gefaltet) | Ja (dreifache AnfĂŒhrungszeichen) |
Wann welches Format verwenden
JSON verwenden, wenn...
- Sie REST-APIs bauen oder konsumieren
- Sie mit package.json oder tsconfig.json arbeiten
- Daten hauptsÀchlich von Maschinen gelesen werden
- Sie die breiteste Tool-UnterstĂŒtzung benötigen
- Datenaustausch zwischen verschiedenen Programmiersprachen
// Typical JSON use cases
// package.json
{
"name": "my-app",
"version": "1.0.0",
"scripts": {
"dev": "next dev",
"build": "next build"
}
}
// tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"strict": true
}
}YAML verwenden, wenn...
- Sie Docker Compose- oder Kubernetes-Dateien schreiben
- Sie CI/CD-Pipelines konfigurieren
- Sie Ansible oder Helm verwenden
- Sie Kommentare in der Konfiguration benötigen
- Menschliche Lesbarkeit PrioritÀt hat
# Docker Compose
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
# GitHub Actions
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci
- run: npm testTOML verwenden, wenn...
- Sie Rust-Projekte konfigurieren (Cargo.toml)
- Sie Python-Projekte einrichten (pyproject.toml)
- Sie Hugo verwenden
- Sie ein Format ohne implizite Typkonvertierung wollen
- Ihre Konfiguration klare Abschnitte hat
# Cargo.toml (Rust)
[package]
name = "my-app"
version = "0.1.0"
edition = "2021"
[dependencies]
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1", features = ["full"] }
# pyproject.toml (Python)
[project]
name = "my-package"
version = "1.0.0"
requires-python = ">=3.9"
[tool.ruff]
line-length = 88
target-version = "py39"HĂ€ufige Fallstricke
YAML: EinrĂŒckungsprobleme
YAML verwendet EinrĂŒckung zur Strukturdefinition. Das Mischen von Tabs und Leerzeichen verursacht hĂ€ufige Fehler.
# BAD: mixing tabs and spaces (invisible but breaks YAML)
services:
web: # tab character - YAML error!
image: nginx
# BAD: inconsistent indentation
services:
web:
image: nginx # 4 spaces here
ports: # 2 spaces here - error!
- "80:80"
# GOOD: consistent 2-space indentation
services:
web:
image: nginx
ports:
- "80:80"YAML: Das "Norwegen-Problem"
In YAML 1.1 werden unquotierte Werte wie NO, yes, on, off als Booleans interpretiert. Der LĂ€ndercode "NO" (Norwegen) wird zu false.
# The "Norway Problem" - YAML 1.1
countries:
- name: Norway
code: NO # Parsed as boolean false!
- name: Sweden
code: SE # Parsed as string "SE"
- name: Finland
code: FI # Parsed as string "FI"
# Other surprising boolean values in YAML 1.1:
truthy: yes # boolean true
falsy: no # boolean false
enabled: on # boolean true
disabled: off # boolean false
positive: TRUE # boolean true
negative: False # boolean false
# FIX: Always quote values that could be misinterpreted
countries:
- name: Norway
code: "NO" # Now correctly a string
- name: Sweden
code: "SE"
settings:
enabled: "yes" # Now correctly a stringJSON: AbschlieĂende Kommas
JSON erlaubt keine abschlieĂenden Kommas. Ein Komma nach dem letzten Element verursacht einen Parse-Fehler.
// BAD: trailing comma after last element
{
"name": "my-app",
"version": "1.0.0",
"private": true, // <-- trailing comma = PARSE ERROR
}
// BAD: trailing comma in array
{
"colors": [
"red",
"green",
"blue", // <-- trailing comma = PARSE ERROR
]
}
// GOOD: no trailing commas
{
"name": "my-app",
"version": "1.0.0",
"private": true
}TOML: Verschachtelte Tabellensyntax
Tief verschachtelte Strukturen in TOML können umstÀndlich werden. Jede Ebene benötigt einen eigenen [section.subsection]-Header.
# TOML: deeply nested config can be verbose
[server]
host = "localhost"
[server.ssl]
enabled = true
[server.ssl.certificates]
cert = "/path/to/cert.pem"
key = "/path/to/key.pem"
[server.ssl.certificates.ca]
bundle = "/path/to/ca-bundle.pem"
# The same in YAML is more compact:
# server:
# host: localhost
# ssl:
# enabled: true
# certificates:
# cert: /path/to/cert.pem
# key: /path/to/key.pem
# ca:
# bundle: /path/to/ca-bundle.pem
# TOML inline tables can help for shallow nesting:
[server]
host = "localhost"
ssl = { enabled = true, cert = "/path/to/cert.pem" }Konvertierungstools
MĂŒssen Sie zwischen Formaten wechseln? Nutzen Sie unsere kostenlosen Konverter:
JSON â YAML Konverter â bidirektionale Konvertierung
TOML â YAML Konverter â sofortige Konvertierung
HĂ€ufig gestellte Fragen
Welches Format wird am schnellsten geparst?
JSON wird generell am schnellsten geparst wegen seiner einfachen, strikten Grammatik. TOML ist ebenfalls schnell. YAML ist am langsamsten wegen seiner komplexen Spezifikation.
Kann man Kommentare in JSON verwenden?
Standard-JSON (RFC 8259) unterstĂŒtzt keine Kommentare. JSON5 und JSONC erweitern JSON um Kommentare, sind aber nicht standardisiert.
Warum behandelt YAML "NO" als false?
In YAML 1.1 werden yes/no, on/off und true/false als Booleans erkannt. Der Code "NO" (Norwegen) wird false. Quotieren Sie diese Werte immer.
Ist TOML besser als YAML fĂŒr Konfigurationsdateien?
TOML wird oft fĂŒr einfache, flache Konfigurationen bevorzugt. YAML eignet sich besser fĂŒr tief verschachtelte Strukturen. Die Wahl hĂ€ngt vom Ăkosystem ab.
Gehen bei der Konvertierung zwischen Formaten Daten verloren?
FĂŒr ĂŒbliche Strukturen ist die Konvertierung verlustfrei. Formatspezifische Features (YAML-Anker, Kommentare) gehen bei der JSON-Konvertierung verloren.
Konvertieren Sie sofort zwischen JSON und YAML â
Konvertieren Sie zwischen TOML und YAML mit unserem Tool â