Hoppa till huvudinnehållet

Vad är YAML? Förstå grunderna, syntaxen och användningsområdena

YAML är ett enkelt men kraftfullt format för konfigurationer, automatisering och dataserialisering. Lär dig hur det fungerar med exempel från verkligheten!
Uppdaterad 31 aug. 2026  · 14 min läsa

Utforska med AI

ChatGPTClaudePerplexity

Genom åren har jag arbetat med otaliga konfigurationsfiler, och YAML har utmärkt sig för sin enkelhet och läsbarhet. Oavsett om jag sätter upp arbetsflöden i Kubernetes, definierar tjänster i Docker eller strukturerar API-förfrågningar, gör YAML komplexa konfigurationer mer hanterbara. Dess rena, indenteringsbaserade struktur eliminerar bruset i format som XML samtidigt som den förblir flexibel.

I den här guiden går jag igenom YAML:s syntax, struktur, avancerade funktioner och bästa praxis så att du kan arbeta med det med självförtroende. 

Vad är YAML?

YAML (Yet Another Markup Language / YAML Ain’t Markup Language) är ett dataserialiseringsformat som prioriterar läsbarhet och enkel användning. Medan XML använder en blandning av HTML-liknande nästlade taggar och JSON använder klamrar och citattecken, ungefär som Pythons ordböcker, är YAML mer koncist och använder indentering för att definiera struktur, vilket gör det mer människovänligt.

YAML stöder olika datatyper, inklusive skalärer (strängar, tal, booleska värden), sekvenser (listor) och mappningar (nyckel–värde-par). Det används i stor utsträckning i konfigurationsfiler, infrastruktur-automatisering och datautbyte, särskilt i verktyg som Kubernetes, Docker och Ansible.

Dessutom är YAML en superset av JSON, vilket betyder att giltiga JSON-filer kan tolkas som YAML. YAML-filer har vanligtvis filändelsen .yaml eller .yml.

Du kan läsa mer om YAML på dess webbplats också!

YAML-syntax och struktur

Det här avsnittet går igenom de grundläggande principerna för YAML-syntax, inklusive nyckel–värde-par, listor, nästlad data och kommentarer.

Grundläggande syntaxregler

Det finns några grundläggande syntaktiska regler för YAML: 

  • Blankstegsindentering anger struktur, så undvik tabbtecken! 
  • Nyckel–värde-par följer strukturen key: value, likt andra språk. 
  • Bindestreck i början av rader anger en lista. 
  • Att använda # skapar kommentarrader.
# Here is an example of YAML
name: John Doe
age: 30
skills:
  - Python
  - YAML

Nyckel–värde-par

YAML representerar data som nyckel–värde-par, ungefär som ordböcker i Python. Detta används ofta för att ange information till olika konfigurationsfiler och inställningar. Det finns inget behov av att omsluta strängar eller nycklar med citattecken; skriv helt enkelt de nycklar och värden som behövs:

location: New York
country: USA
security-level: user

Listor i YAML

Listor representeras med bindestreck (-). Detta låter dig lista flera objekt under en och samma nyckel. Detta visas ofta visuellt som punkter när det läses av Markup‑redigerare.

fruits:
  - Apple
  - Banana
  - Cherry

Nästlad data

Nästlade strukturer möjliggör hierarkisk datarepresentation med hjälp av indentering. Tänk på dem som nästlade ordböcker. Genom att använda indentering anger du vilka nycklar som är delmängder av andra.

person:
  name: Alice
  details:
    age: 25
    city: London

Kommentarer

Kommentarer börjar med # och ignoreras av YAML-tolkar. Dessa kommentarer är enradiga.

# This is a comment
username: admin
password: secret

Avancerade YAML-funktioner

YAML innehåller kraftfulla funktioner som flerradiga strängar, datatyper samt ankare som gör dokument mer effektiva och strukturerade. I det här avsnittet utforskar vi dessa möjligheter med praktiska exempel.

Flerradiga strängar

YAML stöder flerradiga strängar med | (literal block) eller > (folded block). 

  • | literal block skapar en ny rad \n för varje radbrytning. 
  • > folded block skapar bara en ny rad vid flera på varandra följande radbrytningar.
literal: |
  This is a
  multi-line string.

folded: >
  This is another
  multi-line string.

Ovanstående förstås bäst genom att visa utdata.

  • För | (literal block):
This is a
multi-line string.
  • För > (folded block):
This is another multi-line string.

Datatyper i YAML

YAML stöder olika datatyper, inklusive strängar, tal, booleska värden och null-värden. Det identifierar automatiskt typer baserat på formatering men tillåter också explicita typdefinitioner.

Följande exempel visar användningen av grundläggande datatyper i YAML:

string_implicit: Hello, YAML!  # No quotes needed unless necessary
string_double_quoted: "Supports escape sequences like \n and \t"
string_single_quoted: 'Raw text, no escape sequences'

integer: 42  # Whole numbers
float: 3.14  # Numbers with decimals

boolean_true: true
boolean_false: false

null_value: null  # Null value
null_tilde: ~  # Another way to represent null

YAML tillåter explicita typdeklarationer med !!type när det behövs:

explicit_string: !!str 123  # Forces 123 to be a string
explicit_integer: !!int "42"  # Forces "42" to be an integer
explicit_float: !!float "3.14"  # Forces "3.14" to be a float

Eftersom YAML ofta används för strukturerad data stöder det:

  • Listor (sekvenser):
fruits:
  - Apple
  - Banana
  - Cherry
  • Ordböcker (mappningar):
person:
  name: Alice
  age: 30
  is_student: false

Ankare och alias

YAML låter dig definiera återanvändbara värden med ankare (&) och referera till dem senare med alias (*). Detta hjälper till att minska redundans i konfigurationsfiler, vilket gör dem renare och enklare att underhålla.

defaults: &default_settings
  retries: 3
  timeout: 30

server1:
  host: example.com
  retries: *default_settings  # Reuses the retries value from defaults

Syntaxen <<: tillåter att slå samman nyckel–värde-par från ett ankare in i en annan mappning. Om en nyckel finns i båda, åsidosätter det nya värdet det ursprungliga.

defaults: &default_settings
  retries: 3
  timeout: 30

server1:
  <<: *default_settings  # Merges all key-value pairs from default_settings
  host: example.com  # This key is added to the merged data

Så här ser den slutliga upplösta strukturen ut:

server1:
  retries: 3
  timeout: 30
  host: example.com

Ankare och alias är särskilt användbara i stora konfigurationsfiler där det vore ineffektivt att upprepa värden manuellt. De hjälper till att hålla YAML-filer DRY (Don't Repeat Yourself) och gör uppdateringar enklare.

Vanliga användningsområden för YAML

YAML används i stor utsträckning inom programvaruutveckling, infrastruktur-automatisering och API-hantering. Dess människoläsbara syntax gör det till ett föredraget format för konfigurationsfiler, dataserialisering och Infrastructure as Code (IaC). Låt oss utforska dess vanligaste tillämpningar.

Konfigurationsfiler

YAML används i stor utsträckning för konfiguration i applikationer som Docker Compose, Kubernetes och CI/CD-pipelines. Dess lättförståelighet gör det enkelt för vem som helst att ta del av Dockers YAML‑setupfiler och förstå vad som händer.

version: '3'
services:
  web:
    image: nginx
    ports:
      - "80:80"
    environment:
      - NGINX_HOST=localhost
      - NGINX_PORT=80

YAML:s läsbarhet och stöd för ankare och alias hjälper till att minska upprepning, vilket gör det mer lättskött än JSON eller XML.

Lär dig mer om YAML och dess användning i Docker i den här mellannivå-kursen Docker.

Dataserialisering och överföring

YAML används för att serialisera data för API:er och konfigurationshanteringsverktyg genom att konvertera komplexa datastrukturer till ett människoläsbart format som enkelt kan tolkas av maskiner. 

Till exempel en API‑förfrågningskropp formaterad i YAML:

user:
  id: 123
  name: "John Doe"
  email: "johndoe@example.com"
  active: true

YAML:s indenteringsbaserade struktur eliminerar onödig syntax, vilket gör det lättviktigt, läsbart och enklare att ändra jämfört med JSON.

Infrastructure as Code (IaC)

Konfigurationshanteringsverktyg som Ansible och Kubernetes utnyttjar YAML för att definiera systemtillstånd, automatisera processer och säkerställa konsekvens mellan miljöer.

  • I Ansible används YAML för att skriva playbooks som definierar systemtillstånd, uppgifter och beroenden, vilket säkerställer att infrastrukturkomponenter konfigureras konsekvent. 
  • Kubernetes använder YAML‑manifest för att definiera resurser som pods, tjänster och distributioner, vilket möjliggör automatiserad orkestrering av containeriserade applikationer.

Här är ett exempel på en Kubernetes Pod‑konfiguration:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: app-container
      image: my-app:latest
      ports:
        - containerPort: 8080

Lär dig mer om hur YAML används i Kubernetes i den här kursen Introduction to Kubernetes.

API-dokumentation

API-specifikationer som OpenAPI och Swagger använder YAML för att definiera ändpunkter och datastrukturer på ett lättläst sätt. YAML används för att beskriva API‑metoder, förfrågningsparametrar, svarsformat och autentiseringsmetoder.

Här är ett exempel på en OpenAPI-specifikation i YAML:

openapi: 3.0.0
info:
  title: User API
  version: "1.0"
paths:
  /users:
    get:
      summary: Retrieve a list of users
      responses:
        "200":
          description: Successful response

OpenAPI‑specifikationer använder till exempel YAML för att dokumentera RESTful API:er. Detta låter dem tillhandahålla en tydlig ritning för att generera klient‑SDK:er, interaktiv API‑dokumentation och automatiserade tester. Detta strukturerade format säkerställer konsekvens mellan API-implementationer.

Att arbeta med YAML-filer

YAML används ofta för konfigurationsfiler, automatisering och dataserialisering, men eftersom det bygger på indentering är korrekt formatering avgörande. Så här kan du läsa, skriva, validera och redigera YAML effektivt.

Läsa och skriva YAML i Python

Pythons PyYAML-bibliotek kan tolka och generera YAML.

Föreställ dig att du har följande YAML‑konfigurationsfil:

database:
  host: localhost
  port: 5432
  user: admin
  password: secret

Så här kan du arbeta med din konfigurationsfil i Python:

import yaml

# Load YAML data
with open("config.yaml", "r") as file:
    data = yaml.safe_load(file)  # safe_load prevents arbitrary code execution

# Modify data (optional)
data["database"]["user"] = "new_user"

# Write YAML data
with open("output.yaml", "w") as file:
    yaml.dump(data, file, default_flow_style=False)

Om du är intresserad av att arbeta med JSON‑data i Python, kolla in den omfattande Python JSON-guiden.

Validera YAML-filer

För att säkerställa korrekt struktur kan du använda verktyg för att upptäcka tabbtecken i stället för blanksteg eller konstiga problem som upprepade tecken, syntaxfel och avslutande blanksteg.

Här är några populära YAML‑validatorer:

Redigera YAML

Du kan skriva och redigera YAML i vilken textredigerare som helst, men linterverktyg och syntaxmarkering förbättrar läsbarheten.

Några av mina favoritredigerare:

  • VS Code (med YAML‑insticksmoduler)
  • PyCharm (inbyggt stöd)
  • Sublime Text (med YAML‑syntaxmarkering)

Vanliga misstag att undvika i YAML

Trots sin enkelhet kan du ändå lätt få problem och skrivfel när du arbetar med YAML. Det här avsnittet tar upp dessa misstag och ger bästa praxis för att skriva rena och korrekta filer. Det är också därför jag rekommenderar att använda en linter eller textredigerare!

Blanda tabbar och blanksteg

YAML bygger på blanksteg för indentering — blanda aldrig blanksteg och tabbar. Tabbar kommer helt enkelt att förstöra ditt YAML‑skript. Detta är faktiskt ett medvetet beslut, eftersom olika system läser tabbar olika och därför, för att minimera påverkan, är blanksteg det föredragna valet.

Felaktig indentering

Säkerställ konsekvent indentering för att undvika tolkningsfel. Eftersom indentering är YAML:s enda metod för att ange hierarki kan felaktig tolkning orsaka problem med din kod. Du kan lätt råka stoppa undan ett key: value-par på fel plats, så håll ett öga på indenteringen!

Glömma citattecken för specialtecken

Använd citattecken för strängar som innehåller specialtecken eller mellanslag. Saker som omvänt snedstreck, kommatecken, utropstecken och så vidare behöver citattecken för att läsas som strängar.

path: "/home/user/documents"
message: "Hello, World!"

Genom att använda korrekt validering, strukturerad redigering och Pythons PyYAML kan du arbeta effektivt med YAML‑filer samtidigt som du undviker vanliga fallgropar.

Slutsats

YAML är ett kraftfullt men enkelt format som används i stor utsträckning för konfiguration, dataserialisering och infrastruktur-automatisering. Genom att förstå dess syntax, struktur och bästa praxis kan du arbeta effektivt med YAML i olika applikationer.

Om du vill tillämpa YAML i verkliga scenarier:

FAQs

Är YAML universellt?

Så länge datakällan eller målet kan läsa YAML är det en gångbar och användbar metod för att serialisera och transportera data. Se till att du skickar data till ett mål som kan bearbeta YAML.

Är YAML säkert? Kan YAML-filer innebära säkerhetsrisker?

YAML i sig är bara ett dataformat, men säkerhetsrisker uppstår när man tolkar opålitliga YAML‑filer. Standardmetoden yaml.load() i Pythons PyYAML kan köra godtycklig kod inbäddad i YAML, vilket gör den riskabel. Använd i stället alltid yaml.safe_load() för att förhindra oavsiktlig körning av skadlig kod. Säkerställ på liknande sätt strikt schemavalidering när du använder YAML i applikationer för att undvika säkerhetssårbarheter.

Kan YAML hantera miljövariabler?

Ja! Även om YAML i sig inte direkt hanterar miljövariabler tillåter många verktyg (som Docker Compose och Kubernetes) att man refererar till miljövariabler i YAML‑filer.

Hur hanterar man kommentarer i YAML?

YAML stöder enradiga kommentarer med symbolen #, men det stöder inte flerradiga kommentarer. Om du behöver flerradiga kommentarer är en vanlig lösning att använda en skennyckel som _comment. Detta är dock bara en konvention och kommer inte att ignoreras av YAML‑tolkar om inte din applikation specifikt filtrerar bort den.

Ämnen
Data engineering

Lär dig mer om data engineering med de här kurserna!

track

Dataingenjör i Python

40 timmar
Få efterfrågade färdigheter för att effektivt ta in, rensa och hantera data samt schemalägga och övervaka pipelines, så att du sticker ut inom data engineering.
Se detaljerRight Arrow
Starta Kursen
Se merRight Arrow