Go to blue arrow
back to Tech Blog
Udvikling
Alex Gamela
Alexandra Mendes

11. august 2026

Min Read

YAML vs. JSON: Hvad er forskellen?

YAML-bogstavgitter versus en 3D-ring over {JSON}, der sammenligner forskellen mellem begge formater.

Det korte svar: JSON er det sikreste valg til dataudveksling mellem maskiner, mens YAML er det sikreste valg til konfiguration, som redigeres manuelt. Det hele koger ned til én designbeslutning: hvor hvert format placerer sin struktur. JSON monterer stilladset på ydersiden i form af klammer og parenteser, som er synlige. YAML gemmer det inde i væggene ved hjælp af whitespace, som ikke er synligt. Begge er dataserialiseringsformater, der udfører det samme stykke arbejde, hvilket er grunden til, at valget ofte træffes af vane frem for bevidst, og hvorfor så mange teams ender med at vedligeholde begge dele. Her er hvordan du vælger.

blue arrow to the left
Imaginary Cloud logo

Hvad er JSON

JSON står for JavaScript Object Notation, og som navnet antyder, stammer det fra JavaScript-dataformater. Det er en åben standard: letvægts, tekstbaseret og med et bevidst begrænset sæt datatyper. Kort syntaks, enkel struktur og meget let at læse.

Det bruges til at sende data til en server og tilbage til klienten, som en konvolut der indeholder data, mens den sendes mellem parter. Programmører bruger det i mobilapps, i dokumentdatabaser som MongoDB (som gemmer et binært, JSON-lignende format kaldet BSON), i beskedkøer og log-pipelines, og i brugerrettede REST-API'er som et mere brugervenligt alternativ til XML. Det er standardformatet for REST-API'er, og alle browsere kan parse det indbygget.

Ifølge JSON's udvikler, Douglas Crockford, var et sprog baseret på de samme principper allerede i brug hos Netscape i 1996, men JSON blev først etableret som en mainstream-syntaks omkring 2001. Det er sproguafhængigt, så det fungerer med ethvert programmeringssprog, og denne portabilitet er hovedårsagen til, at det har spredt sig, som det har.

JSON-filformat og specifikation

En .json -fil er en almindelig tekstfil, der indeholder et enkelt JSON-dokument, gemt med .json -endelsen og læsbar i enhver editor. Den bruger en kort liste af datatyper: strenge, tal, objekter, arrays, boolske værdier og null. Syntaksen låner konventioner, som er velkendte for programmører af C-familie-sprogene: C, C++, C#, Java, JavaScript, Perl, Python og resten. Som det officielle JSON-websted formulerer det, er et objekt et uordnet sæt af navn/værdi-par, der starter med en venstre krøllet parentes og slutter med en højre krøllet parentes, hvor hvert navn efterfølges af et kolon, og parrene adskilles af kommaer.

Den fungerende grammatik kan være på den ene side hos json.org: ikke et resumé af specifikationen, men selve specifikationen. Formatet er også formelt standardiseret som ECMA-404 (2. udgave, 2017) og IETF RFC 8259 (2017), men den grammatik, som disse dokumenter fastlægger, er den samme kompakte version. Husk det, når YAML-specifikationen dukker op senere.

JSON-syntaksregler

  • Rodnoden skal være et array eller et objekt.
  • Data skrives som navn/værdi-par adskilt af kommaer.
  • Objekter afgrænses af krøllede parenteser, mens firkantede parenteser indeholder arrays.
  • Objekter kan indeholde arrays for at oprette lister.
  • Navne og værdier er sat i anførselstegn og adskilt af et kolon.

JSON-eksempel

De samme data, først i JSON, med information om heavy metal-bandet Metallica:

{
  "band": "Metallica",
  "formed": 1981,
  "origin": "Los Angeles, California",
  "genres": ["thrash metal", "heavy metal"],
  "active": true,
  "members": [
    { "name": "James Hetfield", "role": "vocals, rhythm guitar", "joined": 1981 },
    { "name": "Lars Ulrich", "role": "drums", "joined": 1981 },
    { "name": "Kirk Hammett", "role": "lead guitar", "joined": 1983 },
    { "name": "Robert Trujillo", "role": "bass", "joined": 2003 }
  ],
  "disbanded": null
}

Krøllede parenteser afgrænser objektet og arrays; hvert element er sat i anførselstegn; et kolon adskiller hvert navn fra dets værdi, og et komma adskiller det ene par fra det næste. Hele strukturen ligger lige der på ydersiden, hvor du kan tælle den.

Hvor JSON fungerer, og hvor det ikke gør

Det fungerer, fordi syntaksen er kompakt og læsbar for mennesker, markuppen er minimal, parsing er hurtig i alle sprog, og understøttelsen er stort set universel.

Det kommer til kort på tre punkter. Datatyperne stopper ved strenge, tal, objekter, arrays, boolean og null, så alt mere komplekst skal kodes som en streng og dekodes manuelt i den anden ende. Der er ingen understøttelse af navnerum, kommentarer eller attributter, og de manglende kommentarer er noget, man savner i en konfigurationsfil. Og strukturen er bevidst enkel, så kompleks konfiguration har tendens til at udvikle konventioner ovenpå.

blue arrow to the left
Imaginary Cloud logo

Hvad er YAML

YAML stod tidligere for Yet Another Markup Language, indtil betydningen blev ændret til YAML Ain't Markup Language for at lægge vægt på data frem for dokumenter. Det er et meget letlæseligt og letvægtsformat, der oftest bruges til at gemme konfigurationer til DevOps-værktøjer som Elasticsearch, Docker, Kubernetes, Prometheus og Ansible.

Som det officielle websted, der selv er skrevet i YAML, formulerer det, er YAML et menneskevenligt dataserialiseringssprog til alle programmeringssprog. Det er et dataserialiseringssprog, selvom det lige så ofte bruges til konfigurationsfiler. Vi vil se på det gennem dataserialiserings-prismet.

YAML blev første gang offentliggjort i 2001. Grundlæggerne er Ingy dot Net, Clark Evans og Oren Ben-Kiki, som gik sammen om at skabe noget, der var enklere end XML. Siden da er det blevet standardformatet for konfiguration på tværs af det meste af DevOps-værktøjskæden, hvilket betyder, at valget ofte er truffet for dig, før du overhovedet starter.

YAML-filformat og specifikation

En YAML-fil er en almindelig tekstfil, der gemmes som .yaml eller .yml, og som indeholder et eller flere YAML-dokumenter. Én fil kan indeholde flere dokumenter adskilt af en linje med tre bindestreger, hvilket er måden, hvorpå et Kubernetes-manifest samler et deployment og en service. Det understøtter kommentarer, og det alene gør det behageligt at redigere.

YAML er et supersæt af JSON: ethvert gyldigt JSON-dokument er også gyldig YAML, så en YAML-fil kan indeholde JSON-objekter, og en YAML-parser læser en .json fil uændret. Det håndterer komplekse datatyper uden problemer og indlejrer objekter så dybt, som du har brug for. Den samme fleksibilitet er grunden til, at nogle systemer begrænser, hvilke YAML-funktioner de accepterer.

YAML-syntaksregler

  • Nøgle-værdi-par adskilles af kolon.
  • Strenge er ikke omsluttet af parenteser.
  • Indrykning definerer datahierarkiet, og mellemrum før en nøgle er betydningsfulde.
  • Lister begynder med bindestreger.
  • Kommentarer er tilladt, indledt med et havelågetegn (#).
  • Blok-skalarer skriver flerlinjede strenge som en indrykket blok: pipe-tegnet (|) bevarer linjeskift, mens større-end-tegnet (>) samler dem til én linje.
  • Ankre og aliaser lader en blok blive defineret én gang og genbrugt andre steder, så delt konfiguration skrives ét sted i stedet for fem.

YAML-eksempel

De samme data igen, nu i YAML:

band: Metallica
formed: 1981
origin: Los Angeles, California
genres:
  - thrash metal
  - heavy metal
active: true
members:
  - name: James Hetfield
    role: vocals, rhythm guitar
    joined: 1981
  - name: Lars Ulrich
    role: drums
    joined: 1981
  - name: Kirk Hammett
    role: lead guitar
    joined: 1983
  - name: Robert Trujillo
    role: bass
    joined: 2003
disbanded: null

Tre forskelle springer i øjnene. Krøllede parenteser og klammer er væk, og indrykning angiver hierarkiet. Anførselstegnene er også væk, fordi YAML udleder typen fra værdien. Og medlemmerne er en sekvens af bindestreger frem for et kommasepareret array, så tilføjelse af et femte element er en ny blok frem for en redigering af tegnsætningen omkring det.

Mere ryddeligt, ja. Men se nærmere på, hvor stilladset blev af. I JSON-versionen er det eksplicit angivet. I YAML-versionen udledes det af blanktegn, hvilket er et meget anderledes løfte.

Kodediagram der sammenligner YAML- og JSON-syntaks for at fremhæve forskellene.
Figur 1: Hvor hvert format holder styr på sin struktur. Originalt diagram, Imaginary Cloud.

Hvor YAML fungerer, og hvor det ikke gør

Det fungerer, fordi syntaksen er letlæselig, indrykning angiver struktur uden tegnsætning, kommentarer understøttes, komplekse strukturer kan udtrykkes, og ankre gør det muligt at genbruge en blok frem for at kopiere den. Dette genbrug er en af grundene til, at YAML beskriver infrastruktur, for eksempel Kubernetes-stacks, hvor de samme indstillinger går igen på tværs af dusinvis af objekter.

Det kommer til kort præcis der, hvor fleksibiliteten findes. Forkert indrykning eller mellemrum skaber valideringsfejl, eller endnu værre, en fil der bliver fortolket som noget, du ikke havde til hensigt. Dens deklarative natur gør fejlfinding sværere: der er intet at gennemgå trin for trin, så fejlen dukker først op, når filen bliver læst eller anvendt. Og typeinferens har sine fælder, hvor den mest kendte er landekoden for Norge, NO, som læses som den boolske værdi false, medmindre du sætter den i anførselstegn. Strengt taget hører den opførsel til YAML 1.1: den nuværende specifikation, YAML 1.2, revision 1.2.2 (oktober 2021), begrænser boolske værdier til kun at være true og false. Fælden eksisterer stadig i praksis, fordi rigtig mange parsere stadig bruger 1.1-semantik som standard, så i praksis sætter man NO i anførselstegn og kommer videre.

blue arrow to the left
Imaginary Cloud logo

Forskelle på JSON og YAML

YAML og JSON er to populære formater, der minder om hinanden i struktur og anvendelighed. Deres forskelle i design, syntaks og funktionalitet gør, at valget mellem dem afhænger af formålet.

FunktionJSONYAML
SyntaksTuborgklammer, kantede klammer, citationstegn og kommaerIndrykning, kolonner og bindestreger
KommentarerIkke understøttetUnderstøttet med #
DatatyperStrenge, tal, objekter, arrays, sandhedsværdier, nullDe samme, samt datoer og tidsstempler
FortolkningshastighedHurtigere: en lille, entydig grammatikLangsommere: en langt større specifikation
Menneskelig læsbarhedGod, når man først ser bort fra tegnsætningenBedre til manuel redigering, sværere til at overskue struktur
GenanvendelseIngenAnkres og aliaser
VærktøjssupportIndbygget i browsere og næsten alle standardbibliotekerKræver et eksternt bibliotek i de fleste sprog
Typisk anvendelseAPI'er, dataudveksling, maskingenererede filerKonfigurationsfiler, CI-pipeliner, infrastruktur

En grundlæggende forskel ligger bag det hele. JSON er designet til, at maskiner kan skrive og læse det, så det definerer sin struktur præcist og efterlader ingen plads til fejlfortolkning for en parser. YAML er designet til mennesker, så det flytter strukturen over i whitespace, hvilket får filen til at ligne en disposition frem for kode.

Forskellen i parsing stammer fra specifikationerne, ikke fra benchmarks. JSON-grammatikken fylder en enkelt side på json.org. YAML 1.2-specifikationen fylder derimod dusinvis af sider, der dækker anchors, tags, block scalars, flere dokumenter og implicit typning: mere arbejde for parseren og flere måder, hvorpå det kan gå galt. Betragt hastighedsforskellen som en forskel i karakter frem for et tal: irrelevant for en fil, der læses én gang ved opstart, men målbar for en tjeneste, der deserialiserer hele dagen.

Det er også grunden til, at de fejler på forskellige måder. En fejlbehæftet JSON-fil går som regel i stykker med det samme under parsing. En fejlbehæftet YAML-fil parser ofte uden problemer, men betyder noget helt andet, fordi et indryk har flyttet en nøgle under den forkerte forælder, eller en værdi uden anførselstegn er blevet tolket som den forkerte type. Tavse fejl er de dyreste.

blue arrow to the left
Imaginary Cloud logo

YAML vs. JSON: Hvad er bedst?

Ingen af dem er bedst i teorien. Spørgsmålet giver først mening, når du kender opgaven, så se på funktionen: Hvad skal formatet kunne?

JSON er det bedste valg til dataudveksling. Det er hurtigt at parse, understøttes overalt uden afhængigheder, og hvert element er eksplicit afgrænset, hvilket forhindrer parseren i at misforstå strukturen. Prisen er det begrænsede udvalg af datatyper, så mere komplekse værdier bliver kodet som strenge og afkodet ved udlæsning. Hvis du designer den slags udvekslinger, så sammenligner vi GraphQL vs. REST og vejer de to dominerende API-stile op mod hinanden.

YAML er det bedste valg til konfiguration, som vedligeholdes af mennesker. Det understøtter kommentarer, kan indlejres dybt uden at ophobe tegnsætning, og ankre gør det muligt at skrive fælles indstillinger én gang. Prisen er, at strukturen afhænger af whitespace, så en fil kan være syntaktisk korrekt, men logisk forkert, og parseren har mere arbejde at udføre.

Kort sagt: hvis et program skriver filen, så brug JSON. Hvis et menneske skriver filen, så brug YAML, og sørg for at validere den.

blue arrow to the left
Imaginary Cloud logo

Sådan så det ud ved en reel migrering

Denne opdeling er ikke abstrakt for os. Da vi flyttede FlippedNormals, en markedsplads for computergrafik, der var vokset ud af WordPress, væk fra Heroku og over på AWS, var udløseren præcis den afvejning, der er nævnt ovenfor: Herokus administrerede dynos gav os begrænset kontrol over skalering, efterhånden som kataloget voksede, så vi migrerede platformen til AWS og fuldførte første etape på to måneder, sideløbende med en databaseflytning fra MySQL til PostgreSQL. En infrastrukturmigrering af den kaliber er der, hvor YAML-delen af denne artikel holder op med at være teori: deployment-processen beskrives, gennemgås og versionsstyres i konfigurationsfiler, som redigeres manuelt.

JSON-delen dukkede op i samme system, i de payloads som markedspladsens tjenester sendte mellem hinanden: maskinskrevne, læst tusindvis af gange, aldrig redigeret manuelt. Samme system, begge formater, hver især til det, de er bedst til.

blue arrow to the left
Imaginary Cloud logo

Hvad valget koster dig

For de fleste teams er dette ikke en æstetisk beslutning. Regningen lander fem steder.

Konfigurationsfejl, der når produktion. YAMLs følsomhed over for mellemrum og typeinferens betyder, at en fil kan være gyldig og forkert på samme tid. Ingen parser fanger den type fejl: kun et skematjek gør, eller at deploymenten fejler klokken tre om eftermiddagen. Ethvert repository, hvor YAML driver infrastrukturen, har brug for skemavalidering og en formateringsenhed i continuous integration, og det kræver ingeniørtid at opsætte og vedligeholde.

Sikkerhed ved parseren. YAMLs fulde loader kan konstruere vilkårlige objekter ud fra et dokument, hvilket i stilhed forvandler en anmodning om at parse en fil til en tilladelse til at køre, hvad end filen beskriver, så snart inputtet ikke er betroet. Det er derfor, biblioteker tilbyder en sikker indlæsning, hvor PyYAMLs safe_load er den mest kendte, og hvorfor den bør være standard i enhver kodebase, der læser YAML, den ikke selv har skrevet. JSON har ingen tilsvarende eksponering, da formatet ikke kan beskrive en type, der skal instansieres.

Onboarding-tid. JSON er velkendt for alle, der har brugt et API. YAML har anchors, aliases, block scalars og flere dokumenter pr. fil, og en ny medarbejder møder det hele i sin første uge med Kubernetes. Sæt tid af til oplæring, eller standardisér på et dokumenteret undersæt og få det på skrift.

Parsing-overhead ved skalering. For en konfigurationsfil, der læses én gang ved opstart, er parsing-omkostningen underordnet. For en tjeneste, der deserialiserer tusindvis af payloads i sekundet, er det ikke tilfældet, og den mindre JSON-grammatik er billigere at behandle.

Miljøer med blandede formater. Det dyre resultat er ikke det ene eller det andet format. Det er begge dele: konfiguration i YAML, fixtures i JSON, et konverteringslag klemt ind imellem dem, og to sæt valideringsregler, der driver fra hinanden over atten måneder. Vælg ét format pr. formål, skriv beslutningen ned, og valider hver især med et skema: JSON Schema på JSON-siden og et af YAML-skemaværktøjerne på den anden.

blue arrow to the left
Imaginary Cloud logo

Tjekliste til valg af format

Format-tjekliste der sammenligner YAML og JSON: syntaks, datatyper og læsbarhed.

Fire spørgsmål, vi gennemgår, før vi beslutter os for et serialiseringsformat til et projekt.

  • Hvem skriver filen, et menneske eller et program? Hvis et program skriver den, så brug JSON. Maskinskrevet YAML giver dig både parsing-omkostninger og tvetydighed uden nogen af fordelene ved læsbarhed.
  • Er der brug for kommentarer? Det er der som regel ved konfiguration, fordi årsagen til en værdi er lige så vigtig som selve værdien. JSON kan ikke indeholde kommentarer, og nøgler, der fungerer som kommentarer, er en nødløsning frem for en egentlig løsning.
  • Hvordan valideres den, før den træder i kraft? Hvis svaret er, at deploymenten fejler, så har formatet brug for et skema og en linter i pipelinen, før noget andet sker.
  • Hvor ofte læses den under runtime? Én gang ved opstart: vælg det læsbare format. Tusindvis af gange i sekundet: vælg det hurtige.

Oftest peger svarene ikke på ét enkelt format for hele systemet. På de fleste af de platforme, vi bygger, ender opdelingen samme sted: YAML til det, mennesker vedligeholder – pipelines, manifester og miljøkonfiguration – og JSON til det, tjenester sender mellem hinanden. Den fejl, vi ser oftest, er ikke at vælge det forkerte format; det er at lade begge dele sprede sig til den samme opgave, uden at nogen tager stilling til, hvad der hører til hvor.

blue arrow to the left
Imaginary Cloud logo

Ofte stillede spørgsmål

Er YAML hurtigere end JSON?

Nej. JSON parses hurtigere, fordi dets grammatik er begrænset til én side og ikke tillader tvetydighed, mens YAML-specifikationen er langt større og kræver typeinferens. Forskellen er irrelevant for en konfigurationsfil, der kun læses ved opstart, men den betyder noget for en tjeneste, der løbende parser payloads.

Kan YAML læse JSON-filer?

Ja. YAML er et supersæt af JSON, så ethvert gyldigt JSON-dokument er også gyldig YAML, og en YAML-parser læser en .json fil uændret. Det omvendte er ikke tilfældet: en JSON-parser kan ikke læse YAML.

Hvad er en .json fil?

En almindelig tekstfil, der indeholder et enkelt JSON-dokument, gemt med filendelsen .json . Den indeholder et objekt eller et array i roden, bruger anførselstegn omkring nøgler og værdier, og kan åbnes i enhver teksteditor.

Hvad er en YAML-fil?

En almindelig tekstfil gemt som .yaml eller .yml , der indeholder et eller flere YAML-dokumenter. Den bruger indrykning i stedet for parenteser, understøtter kommentarer og er standardformatet for konfiguration til værktøjer som Kubernetes, Docker Compose og Ansible.

Hvilken bør jeg bruge til Kubernetes-konfiguration?

YAML, fordi det er det, økosystemet er skrevet i, og manifester redigeres og gennemgås af mennesker. Kubernetes accepterer den tilsvarende JSON-version, men hvert eneste eksempel, selvstudium og genereret manifest, du støder på, vil være i YAML.

Har jeg brug for en YAML-formateringsenhed?

I alle arkiver, hvor mere end én person redigerer YAML, ja. En formateringsenhed kombineret med en linter i CI fanger de indryknings- og typeinferensfejl, som en parser gladeligt accepterer, men som en klynge senere afviser.

Er YAML sikkert at parse?

Kun med en sikker loader. Den fulde loader kan instantiere vilkårlige objekter beskrevet i dokumentet, så parsing af en ikke-betroet fil kan eksekvere kode. Brug den sikre variant, som dit bibliotek tilbyder, såsom PyYAML's safe_load, hvor end filen ikke stammer fra dit eget arkiv.

Hvornår bør jeg vælge JSON frem for YAML?

Når et program skriver eller læser filen frem for et menneske: API-nyttelaster, beskedkøer, loglinjer, test-fixtures, browserlagring. Vælg YAML, når et menneske vedligeholder filen og har brug for kommentarer og en struktur, der er let at overskue.

Kan jeg konvertere mellem YAML og JSON?

Ja, og de fleste YAML-biblioteker gør det med en enkelt linje kode. Konvertering fra YAML til JSON medfører tab af kommentarer og ankre, så betragt YAML som kilden og JSON som det genererede artefakt, aldrig omvendt.

Valg af serialiseringsformat er en lille beslutning med langtrækkende konsekvenser, og det er som regel den mindst interessante del af et meget større arkitekturspørgsmål. Hvis du overvejer, hvordan dine tjenester skal udveksle og lagre data, er vores ingeniørteam klar til at drøfte det med dig.

Banner til valg af softwarevirksomhed med tekst om at bygge skalerbare produkter og isometrisk enhedsgrafik.
blue arrow to the left
Imaginary Cloud logo
Alex Gamela
Alex Gamela

Indholdsforfatter og digital medieproducent med interesse i det symbiotiske forhold mellem teknologi og samfund. Bøger, musik, og guitarer er en konstant.

Read more posts by this author
Alexandra Mendes
Alexandra Mendes

Alexandra Mendes er Senior Growth Specialist hos Imaginary Cloud med 3+ års erfaring med at skrive om softwareudvikling, AI og digital transformation. Efter at have gennemført et frontend-udviklingskursus fik Alexandra nogle praktiske kodningsevner og arbejder nu tæt sammen med tekniske teams. Alexandra brænder for, hvordan nye teknologier former erhvervslivet og samfundet, og hun nyder at omdanne komplekse emner til klart og nyttigt indhold for beslutningstagere.

LinkedIn

Read more posts by this author

People who read this post, also found these interesting:

Dropdown caret icon