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äsbarhetBraUtmärkt
MaskinläsbarhetUtmärktKorrekt
KommentarerNejJa (#)
Signifikant indenteringNejJa
ParsningshastighetSnabbLångsammare
Rika typer (datum, binär)NejJa
Anchors / aliasNejJa
Typiskt användningsfallAPI, lagring, datautbyteKonfiguration, 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.