JSON vs YAML: skillnader och användningsfall
JSON och YAML är de två mest använda textuella serialiseringsformaten för att beskriva strukturerade data: applikationskonfiguration, API-payload, infrastrukturfiler, Kubernetes-manifest, CI/CD-pipelines. Båda representerar samma grundläggande strukturer (objekt, listor, skalärer) men med olika filosofier: JSON prioriterar maskinläsbarhet och universalitet, YAML satsar på mänsklig läsbarhet och koncishet. Den här artikeln jämför båda formaten punkt för punkt för att hjälpa dig välja.
Vad är JSON?
JSON (JavaScript Object Notation) är ett serialiseringsformat som introducerades av Douglas Crockford i början av 2000-talet, härlett från JavaScripts objektlitteralsyntax. Standardiserat genom RFC 8259 och ECMA-404 är det idag webbens pivåformat: nästan alla REST-API:er, NoSQL-databaser och frontend-konfigurationer använder det.
JSON bygger på två strukturer:
- En ordnad samling nyckel-värde-par (objektet, mellan klamrar)
- En ordnad lista med värden (arrayen, mellan hakparenteser)
Skalärvärden är string, number, true, false
eller null. Strängar måste omges av dubbla citattecken. JSON stödjer inte kommentarer.
Vad är YAML?
YAML (YAML Ain't Markup Language) är ett format som dök upp 2001, utformat från början för att vara läsbart av en människa. Aktuell specifikation är YAML 1.2.2. Dess utmärkande drag: det använder indentering för att uttrycka hierarki, på samma sätt som Python.
YAML är en supermängd av JSON sedan version 1.2: varje giltigt JSON-dokument är ett giltigt
YAML-dokument. Men YAML lägger till mycket: kommentarer, strängar utan citattecken, flerradiga
strängar, ankare och alias, taggar för explicit typning, flera dokument i samma fil
(---).
Syntax jämförd
Här är samma struktur uttryckt i de båda formaten.
JSON
{
"name": "cdrn",
"version": "1.14",
"tags": ["seo", "tools", "open-source"],
"author": {
"name": "Adrien",
"email": "contact@example.com"
},
"active": true,
"stars": null
}
YAML
# Projektkonfiguration
name: cdrn
version: "1.14"
tags:
- seo
- tools
- open-source
author:
name: Adrien
email: contact@example.com
active: true
stars: null
För samma innehåll upptar YAML ungefär lika många rader men undviker klamrar, hakparenteser,
avslutande kommatecken och citattecken på de flesta strängar. Kommentarer (rader med
#) är tillåtna.
Typer som stöds
JSON känner till 6 typer: object, array, string,
number, boolean, null. Ingen inbyggd datumtyp, inget binärt,
ingen explicit åtskillnad mellan heltal och flyttal.
YAML 1.2 känner till samma som JSON och lägger till: ISO 8601-tidsstämplar, binärer (base64-kodade
via taggen !!binary), distinkta heltal och flyttal, oändlighet, NaN, och anpassade
typer via taggar (!!str, !!int, !!float...). YAML 1.1
accepterade yes/no/on/off som booleska värden: en klassisk fälla på äldre parsare.
Prestanda och ekosystem
JSON är typiskt 3 till 10 gånger snabbare att parsa än YAML, och dess parsare finns överallt (integrerade i runtime för nästan alla språk). YAML-bibliotek är tyngre eftersom de hanterar en rikare grammatik (anchors, taggar, multi-doc).
På ekosystemsidan: JSON dominerar HTTP-API:er, NoSQL-databaser (MongoDB, CouchDB), filerna
package.json, composer.json, tsconfig.json. YAML har
etablerat sig för applikationskonfiguration och infrastructure-as-code: Symfony, Spring Boot,
Rails, Docker Compose, Kubernetes, GitHub Actions, GitLab CI, Ansible.
Jämförelsetabell
| Kriterium | JSON | YAML |
|---|---|---|
| Mänsklig läsbarhet | Bra | Utmärkt |
| Maskinläsbarhet | Utmärkt | Korrekt |
| Kommentarer | Nej | Ja (#) |
| Signifikant indentering | Nej | Ja |
| Parsningshastighet | Snabb | Långsammare |
| Rika typer (datum, binär) | Nej | Ja |
| Anchors / alias | Nej | Ja |
| Typiskt användningsfall | API, lagring, datautbyte | Konfiguration, infra-as-code |
Typiska användningsfall
Välj JSON när
- Du designar ett REST-API eller en webhook-endpoint
- Du lagrar data i en NoSQL-databas eller en cache
- Du utbyter data mellan frontend och backend
- Parsningsprestanda är kritiskt (hög throughput, edge)
- Du vill ha ett universellt stött format utan beroenden
Välj YAML när
- Du skriver en applikationskonfiguration som redigeras för hand
- Du behöver kommentarer för att dokumentera alternativen
- Du skriver Kubernetes, Docker Compose, GitHub Actions, Ansible
- Du vill faktorisera block med ankare och alias
- Läsbarhet är viktigare än bearbetningshastighet
Rekommendation
Den enkla regeln: JSON för maskinen, YAML för människan. Om din fil produceras eller konsumeras av ett program, välj JSON. Om den skrivs och läses för hand, välj YAML. Många ekosystem accepterar båda: Symfony läser YAML, JSON och XML för sina konfigurationer, Kubernetes accepterar båda för sina manifest. Vid tvekan, välj YAML för mänsklig konfiguration och JSON för automatiserade flöden.
Du kan testa konvertering från ett format till ett annat med vår JSON / YAML-konverterare och snabbt formatera ett dokument med JSON-formateraren.
Vanliga frågor
Är YAML långsammare än JSON?
Ja, som regel kostar det flera gånger mer CPU att parsa ett YAML-dokument än samma JSON-dokument, eftersom YAML-grammatiken är rikare (indentering, taggar, anchors). I praktiken är gapet försumbart för konfigurationsfiler. Det blir märkbart när du parsar tiotusentals dokument i loop.
Kan man automatiskt konvertera YAML till JSON?
Ja: varje YAML-dokument kan konverteras till JSON utan förlust om man undviker YAML-specifika typer (tidsstämplar, anchors). Det omvända är ännu enklare, eftersom JSON är en delmängd av YAML 1.2. Vår konverterare klarar båda riktningarna.
Accepterar JSON kommentarer?
Nej, JSON-standarden förbjuder dem. Dialekter finns (JSON5, JSONC) men stöds inte universellt. Om du behöver kommentarer, välj YAML eller TOML.
Varför använder Kubernetes YAML och inte JSON?
Kubernetes-manifest skrivs och läses av människor. YAML erbjuder kommentarer, en mindre brusig syntax och möjligheten att faktorisera via anchors. Kubernetes-API:t accepterar också JSON, men det idiomatiska bruket är YAML.
Är YAML verkligen en supermängd av JSON?
Ja sedan YAML 1.2: varje giltigt JSON-dokument är ett giltigt YAML-dokument. Detta gör det möjligt att inbädda JSON i en YAML-fil utan att ändra den, vilket är praktiskt för genererade eller kopierade block.