JSON vs YAML: forskelle og anvendelsestilfælde
JSON og YAML er de to mest almindelige tekstlige serialiseringsformater mest brugt til at beskrive strukturerede data: applikationskonfiguration, API-nyttelast, infrastrukturfiler, Kubernetes-manifester, CI/CD-pipelines. Begge repræsenterer det samme grundlæggende strukturer (objekter, lister, skalarer), men med forskellige filosofier: JSON favoriserer maskinlæsbarhed og universalitet, YAML fokuserer på menneskelig læsbarhed og kortfattethed. Denne artikel sammenligner de to formater punkt for punkt for at hjælpe dig med at vælge.
Hvad er JSON?
JSON (JavaScript Object Notation) er et serialiseringsformat introduceret af Douglas Crockford i begyndelsen af 2000'erne afledte JavaScript-objektets bogstavelige syntaks. Standardiseret af RFC 8259 og ECMA-404, det er i dag det centrale format på nettet: næsten alle REST API'er, NoSQL-databaser og Frontend-konfigurationer bruger det.
JSON er baseret på to strukturer:
- En ordnet samling af nøgleværdi-par (objektet, omgivet af krøllede parenteser)
- En ordnet liste over værdier (matrixen i firkantede parenteser)
Skalære værdier er streng, tal, true,
falsk eller null. Strenge skal være omgivet af anførselstegn.
fordobler. JSON understøtter ikke kommentarer.
Hvad er YAML?
YAML (YAML Ain't Markup Language) er et format, der dukkede op i 2001, designet fra starten at kunne læses af et menneske. Den aktuelle specifikation er YAML 1.2.2. Dens karakteristiske kendetegn: den bruger indrykning til at udtrykke hierarki, som Python.
YAML er et supersæt af JSON siden version 1.2: ethvert gyldigt JSON-dokument er et dokument
Gyldig YAML. Men YAML tilføjer meget: kommentarer, ikke-citerede strenge, multi-linjer, ankre
og aliaser, tags til eksplicit indtastning, flere dokumenter i samme fil
(---).
Sammenlignende syntaks
Her er den samme struktur udtrykt i begge formater.
JSON
{
"navn": "cdrn",
"version": "1.14",
"tags": ["seo", "værktøjer", "open-source"],
"forfatter": {
"name": "Adrien",
"email": "contact@example.com"
},
"aktiv": sandt,
"stjerner": null
}
YAML
# Projektkonfiguration
navn: cdrn
version: "1.14"
tags:
- seo
-værktøjer
- open source
forfatter:
Navn: Adrien
e-mail: contact@example.com
aktiv: sand
stjerner: null
På det samme indhold optager YAML omtrent det samme antal linjer, men undgår seler,
parenteser, efterfølgende kommaer og anførselstegn på de fleste strenge. Kommentarer (linjer
#) er tilladt.
Understøttede typer
JSON kender 6 typer: objekt, array, streng,
nummer, boolesk, null. Ingen oprindelig dato, ingen binær,
ingen eksplicit heltal/flydende skelnen.
YAML 1.2 kender det samme som JSON og tilføjer: ISO 8601 tidsstempler, binær (base64 kodet via
tag !!binary), distinkte heltal og flydende, infinity, NaN og brugerdefinerede typer
via tags (!!str, !!int, !!float...). YAML 1.1 accepteret
yes/no/on/off som booleans: en klassisk fælde med gamle parsere.
Ydeevne og økosystem
JSON er typisk 3 til 10 gange hurtigere at parse end YAML og dets parsere er tilgængelige overalt (integreret i runtime på næsten alle sprog). Biblioteker YAML er tungere, fordi de klarer en rigere grammatik (ankre, tags, multi-doc).
På økosystemsiden: JSON dominerer HTTP API'er, NoSQL-databaser (MongoDB, CouchDB), filer
package.json, composer.json, tsconfig.json. YAML har etableret sig
til applikationskonfiguration og infrastruktur-som-kode: Symfony, Spring Boot, Rails,
Docker Compose, Kubernetes, GitHub Actions, GitLab CI, Ansible.
Sammenligningstabel
| Kriterium | JSON | YAML |
|---|---|---|
| Menneskelig læsbarhed | God | Fremragende |
| Maskinlæsbarhed | Fremragende | Korrekt |
| Kommentarer | Nej | Ja (#) |
| Væsentlig indrykning | Nej | Ja |
| Parsinghastighed | Hurtig | Langsommere |
| Rige typer (dato, binære) | Nej | Ja |
| Ankre / alias | Nej | Ja |
| Typisk brug | API, lagring, dataudveksling | Konfiguration, infra-as-code |
Typiske anvendelsestilfælde
Vælg JSON når
- Du er ved at designe et REST API eller webhook-slutpunkt
- Du gemmer data i en NoSQL-database eller en cache
- Du udveksler data mellem frontend og backend
- Parsing-ydeevne er kritisk (høj gennemstrømning, edge)
- Du vil have et universelt understøttet format uden afhængigheder
Vælg YAML når
- Du skriver en manuelt redigeret programkonfiguration
- Du har brug for feedback til dokumentindstillinger
- Du skriver Kubernetes, Docker Compose, GitHub Actions, Ansible
- Du vil faktorisere blokke med ankre og aliaser
- Læsbarhed går forud for behandlingshastighed
Henstilling
Den enkle regel: JSON for maskinen, YAML for mennesket. Hvis din fil er produceret eller forbrugt af et program, tag JSON. Hvis det er skrevet og korrekturlæst i hånden, så tag YAML. Mange økosystemer accepterer begge dele: Symfony læser YAML, JSON og XML for dets konfigurationer, Kubernetes accepterer begge for dets manifester. Når du er i tvivl, så gå til YAML for at Menneskelig konfiguration og JSON til automatiserede flows.
Du kan teste konvertering fra et format til et andet med vores JSON/YAML-konverter og formater hurtigt et dokument med JSON-formater.
Ofte stillede spørgsmål
Er YAML langsommere end JSON?
Ja, som en generel regel koster parsing af et YAML-dokument flere gange mere CPU end at parse samme JSON-dokument, fordi YAML-grammatikken er rigere (indrykning, tags, ankre). I praktisk, forskellen er ubetydelig for konfigurationsfiler. Det bliver følsomt når du parser titusindvis af dokumenter igen og igen.
Kan vi automatisk konvertere YAML til JSON?
Ja: ethvert YAML-dokument kan konverteres til JSON uden tab, hvis du undgår YAML-typer specifik (tidsstempler, ankre). Det omvendte er endnu enklere, idet JSON er en delmængde fra YAML 1.2. Vores konverter går begge veje.
Accepterer JSON kommentarer?
Nej, JSON-standarden forbyder dem. Dialekter findes (JSON5, JSONC), men er det ikke universelt understøttet. Hvis du har brug for kommentarer, så tag YAML eller TOML.
Hvorfor bruger Kubernetes YAML og ikke JSON?
Kubernetes manifester er skrevet og gennemgået af mennesker. YAML tilbyder kommentarer, en mindre støjende syntaks og mulighed for factoring via ankre. Kubernetes API accepterer også JSON, men den idiomatiske brug forbliver YAML.
Er YAML virkelig et supersæt af JSON?
Ja siden YAML 1.2: ethvert gyldigt JSON-dokument er et gyldigt YAML-dokument. Dette tillader at indlejre JSON i en YAML-fil uden at ændre den, hvilket er praktisk til blokke genereret eller kopieret og indsat.