DevToolBoxKOSTENLOS
Blog

JSON vs YAML vs TOML: Welches Config-Format sollten Sie verwenden?

10 Min. Lesezeitvon DevToolBox

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: 100

TOML

# 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

EigenschaftJSONYAMLTOML
KommentareNeinJa (#)Ja (#)
Datentypenstring, number, boolean, null, array, objectstring, int, float, bool, null, date, array, map + Tagsstring, integer, float, boolean, datetime, array, table
LesbarkeitMittel — Klammern und AnfĂŒhrungszeichen erhöhen das RauschenHoch — saubere einrĂŒckungsbasierte SyntaxHoch — INI-Ă€hnlich, explizite Abschnitte
StrengeSehr streng — keine abschließenden Kommas oder KommentareLocker — implizite Typisierung verursacht ÜberraschungenStreng — explizite Typen, minimale Mehrdeutigkeit
Tool-UnterstĂŒtzungHervorragend — universelle Parser-UnterstĂŒtzungGut — Parser in allen HauptsprachenGut — wachsend, stark in Rust/Python/Go
Mehrzeilige StringsNein (\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 test

TOML 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 string

JSON: 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 →

𝕏 Twitterin LinkedIn
War das hilfreich?

Bleiben Sie informiert

Wöchentliche Dev-Tipps und neue Tools.

Kein Spam. Jederzeit abbestellbar.

Verwandte Tools ausprobieren

Y{}JSON ↔ YAML ConverterTYTOML ↔ YAML{ }JSON FormatterYMLYAML Validator & Formatter

Verwandte Artikel

Cron-AusdrĂŒcke Beispiele: Alle 5 Minuten, tĂ€glich, wöchentlich

Cron-AusdrĂŒcke mit praktischen Beispielen meistern.

Docker Compose YAML-Validierung: 10 hÀufige Syntaxfehler und ihre Behebung

Verschwenden Sie keine Zeit mit Docker Compose YAML-Fehlern. Lernen Sie die 10 hÀufigsten Syntaxfehler zu erkennen und zu beheben.