Introduktion

JSON (JavaScript Object Notation) och YAML (YAML Ain’t Markup Language) är två av de mest populära formaten för att strukturera och utbyta data. Men vilket ska du välja för ditt projekt? I denna guide går vi igenom skillnaderna, för- och nackdelar, samt praktiska användningsområden.

Vad är JSON?

JSON är ett lättviktigt dataformat som är lätt för både människor och maskiner att läsa och skriva. Det introducerades av Douglas Crockford och har blivit standarden för dataöverföring på webben.

JSON Exempel

{
  "name": "John Doe",
  "age": 30,
  "email": "john@example.com",
  "hobbies": ["photography", "hiking", "coding"],
  "address": {
    "street": "123 Main St",
    "city": "Stockholm"
  }
}

JSON Fördelar

  • Universellt stöd: Finns i alla moderna programmeringsspråk
  • Snabbt att parsa: Inbyggda parsers i de flesta språk
  • Strikt syntax: Mindre risk för fel
  • Perfekt för APIs: Standard för RESTful APIs
  • Kompakt: Mindre filstorlek jämfört med XML

JSON Nackdelar

  • Mindre läsbart: Kräver citattecken och kommatecken överallt
  • Inga kommentarer: Kan inte lägga till förklarande text
  • Repetitivt: Nycklar måste upprepas i arrays
  • Begränsade datatyper: Endast string, number, boolean, null, object, array

Vad är YAML?

YAML är ett människovänligt format för serialisering av data. Det designades för att vara lättläst och används ofta för konfigurationsfiler.

YAML Exempel

name: John Doe
age: 30
email: john@example.com
hobbies:
  - photography
  - hiking
  - coding
address:
  street: 123 Main St
  city: Stockholm

YAML Fördelar

  • Mycket läsbart: Använder indentation istället för brackets
  • Stöder kommentarer: Perfekt för dokumentation
  • Flexibelt: Fler datatyper (datum, null, multi-line strings)
  • Mindre verbose: Färre tecken behövs
  • Ankare och alias: Återanvända data (DRY-princip)

YAML Nackdelar

  • Indentation-känsligt: Fel indentation = syntaxfel
  • Långsammare parsing: Mer komplext format att tolka
  • Säkerhetsrisker: Kan exekvera kod vid parsing (om inte säkrad)
  • Mindre utbrett: Inte alla språk har bra YAML-stöd
  • Fler edge cases: Mer komplext format = fler fallgropar

Direktjämförelse

Prestanda

Vinnare: JSON

  • JSON parsas 3-5x snabbare än YAML
  • Mindre minnesanvändning
  • Bättre för stora dataset

Läsbarhet

Vinnare: YAML

  • Enklare att läsa för människor
  • Mindre “noise” från syntax
  • Bättre för konfigurationsfiler

Kompatibilitet

Vinnare: JSON

  • Universellt stöd i alla webbläsare
  • Native support i JavaScript
  • Standard för APIs

Flexibilitet

Vinnare: YAML

  • Fler datatyper
  • Stöd för kommentarer
  • Kan referera till andra delar av dokumentet

När ska man använda JSON?

APIs och Dataöverföring

{
  "status": "success",
  "data": {
    "users": [
      {"id": 1, "name": "Alice"},
      {"id": 2, "name": "Bob"}
    ]
  }
}

Perfekt för:

  • REST APIs
  • GraphQL responses
  • Webhook payloads
  • Browser localStorage
  • NoSQL databases (MongoDB, CouchDB)

När snabbhet är viktigt

Om din applikation hanterar stora mängder data som behöver parsas snabbt, är JSON det självklara valet.

När du behöver bred kompatibilitet

JSON fungerar överallt - från äldre webbläsare till moderna IoT-enheter.

När ska man använda YAML?

Konfigurationsfiler

# Application Configuration
server:
  host: localhost
  port: 3000
  ssl:
    enabled: true
    cert: /path/to/cert.pem

database:
  connection: postgres://localhost:5432/mydb
  pool_size: 10

# Feature flags
features:
  newUI: true
  betaFeatures: false

Perfekt för:

  • Docker Compose
  • Kubernetes manifests
  • CI/CD pipelines (GitHub Actions, GitLab CI)
  • Ansible playbooks
  • Application config files

När människor ska läsa och redigera

YAML är överlägset för filer som utvecklare ofta behöver ändra manuellt.

När du behöver kommentarer

# Production settings - DO NOT change without approval
timeout: 30  # seconds
retries: 3   # maximum retry attempts

Kommentarer är ovärderliga i konfigurationsfiler för att förklara varför vissa värden är satta.

Verkliga användningsfall

Exempel 1: Docker Compose (YAML)

version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: secret

Varför YAML? Utvecklare behöver kunna läsa och ändra detta ofta. Kommentarer är viktiga för att dokumentera konfigurationen.

Exempel 2: REST API Response (JSON)

{
  "status": 200,
  "data": {
    "products": [
      {"id": 1, "name": "Laptop", "price": 999},
      {"id": 2, "name": "Mouse", "price": 29}
    ]
  }
}

Varför JSON? Snabb parsing i webbläsaren, universellt stöd, standard för APIs.

Exempel 3: Package Manager (JSON)

{
  "name": "my-app",
  "version": "1.0.0",
  "dependencies": {
    "react": "^18.0.0",
    "typescript": "^5.0.0"
  }
}

Varför JSON? package.json är en etablerad standard. Verktyg som npm och yarn förväntar sig JSON.

Konvertera mellan JSON och YAML

Du behöver inte välja bara ett format! Många projekt använder båda:

  • YAML för config-filer som människor redigerar
  • JSON för data som genereras av program

Använd våra verktyg för att enkelt konvertera:

Best Practices

För JSON

  1. Använd konsekvent indentation (2 eller 4 spaces)
  2. Validera med en linter
  3. Undvik för djupt nästlade strukturer
  4. Använd meningsfulla nycklar
  5. Komprimera för produktion

För YAML

  1. Använd 2 spaces för indentation (aldrig tabs)
  2. Lägg till kommentarer för komplex logik
  3. Använd quotes för strings med specialtecken
  4. Validera med en YAML linter
  5. Var försiktig med säkerheten - använd säker parsing

Säkerhetsaspekter

JSON

JSON är relativt säkert eftersom det bara innehåller data. Men:

  • Validera alltid input från användare
  • Använd JSON.parse() istället för eval()
  • Begränsa storlek på payloads

YAML

YAML kan vara farligt om det inte hanteras rätt:

  • Kan exekvera godtycklig kod vid parsing
  • Använd alltid “safe load” funktioner
  • Lita aldrig på YAML från opålitliga källor
  • Begränsa vilka typer som tillåts
# FARLIGT - kan exekvera kod
yaml.load(untrusted_yaml)

# SÄKERT - bara data
yaml.safe_load(untrusted_yaml)

Slutsats

Det finns inget “bästa” format - det beror på användningsfallet:

Välj JSON när:

  • Du bygger APIs
  • Prestanda är kritisk
  • Du behöver universell kompatibilitet
  • Data genereras av program

Välj YAML när:

  • Du skriver konfigurationsfiler
  • Människor ska läsa och redigera filen
  • Du behöver kommentarer
  • Läsbarhet är viktigare än hastighet

Många moderna projekt använder båda: YAML för konfiguration och JSON för dataöverföring. Med rätt verktyg är det enkelt att konvertera mellan formaten när det behövs.

Nästa steg