← Torna al Blog

JSON vs YAML: Confronto completo e quando usare ciascuno

Confronto dettagliato tra JSON e YAML: sintassi, readability, performance, use cases. Scopri quale formato scegliere per configurazioni, API, CI/CD.

Big JSON Team12 min di letturacomparison
B

Big JSON Team

Technical Writer

Expert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.

12 min di lettura

# JSON vs YAML: Confronto completo

JSON e YAML sono due formati molto popolari per configurazione e scambio dati. Questa guida ti aiuterà a capire le differenze e quando usare ciascuno.

Overview

JSON (JavaScript Object Notation)

Caratteristiche:
  • Formato basato su testo
  • Sintassi JavaScript-like
  • Strict syntax rules
  • Ottimo per API e data exchange

Esempio:
{

"name": "MyApp",

"version": "1.0.0",

"dependencies": {

"express": "^4.18.0",

"mongoose": "^6.0.0"

},

"scripts": {

"start": "node server.js",

"test": "jest"

}

}

YAML (YAML Ain't Markup Language)

Caratteristiche:
  • Human-readable format
  • Indentation-based
  • Supporta commenti
  • Popolare per configurazioni

Esempio (stesso contenuto):
name: MyApp

version: 1.0.0

dependencies:

express: ^4.18.0

mongoose: ^6.0.0

scripts:

start: node server.js

test: jest

Confronto sintassi

Oggetti/Mapping

JSON:
{

"utente": {

"nome": "Marco",

"età": 30,

"città": "Roma"

}

}

YAML:
utente:

nome: Marco

età: 30

città: Roma

Winner: 🏆 YAML - Più pulito, meno caratteri

Array/Liste

JSON:
{

"linguaggi": ["JavaScript", "Python", "Go"],

"utenti": [

{"nome": "Marco", "ruolo": "dev"},

{"nome": "Laura", "ruolo": "admin"}

]

}

YAML:
linguaggi:

- JavaScript

- Python

- Go

utenti:

- nome: Marco

ruolo: dev

- nome: Laura

ruolo: admin

Winner: 🏆 YAML - Più leggibile

Stringhe

JSON:
{

"short": "Hello",

"escaped": "He said: \"Hi!\"",

"multiline": "Line 1\nLine 2\nLine 3"

}

YAML:
short: Hello

escaped: 'He said: "Hi!"'

multiline: |

Line 1

Line 2

Line 3

# Oppure

inline: >

Questo è un testo lungo

che viene unito

in una singola riga

Winner: 🏆 YAML - Multi-line naturale

Numeri e Booleani

JSON:
{

"age": 30,

"price": 19.99,

"active": true,

"deleted": false,

"nullable": null

}

YAML:
age: 30

price: 19.99

active: true # o yes, on

deleted: false # o no, off

nullable: null # o ~

Winner: 🤝 Pari - Sintassi simile

Commenti

JSON:
{

"_comment": "JSON non supporta commenti nativi",

"workaround": "Usare campi speciali"

}

YAML:
# Commenti supportati!

name: MyApp # Inline comment

version: 1.0.0

# Multi-line comment

# Utile per documentazione

Winner: 🏆 YAML - Commenti nativi

Confronto tecnico

Performance

Parsing speed:

| Formato | Parse Time (10MB file) |

|---------|------------------------|

| JSON | ~100ms |

| YAML | ~500ms |

JSON è 3-5x più veloce nel parsing. Benchmark Python:
import json

import yaml

import time

data = {"key": "value"} 10000

# JSON

start = time.time()

json_str = json.dumps(data)

parsed = json.loads(json_str)

json_time = time.time() - start

# YAML

start = time.time()

yaml_str = yaml.dump(data)

parsed = yaml.safe_load(yaml_str)

yaml_time = time.time() - start

print(f"JSON: {json_time:.4f}s")

print(f"YAML: {yaml_time:.4f}s")

# JSON: 0.0234s

# YAML: 0.1156s (5x più lento)

Winner: 🏆 JSON - Molto più veloce

File size

Confronto dimensioni: JSON (252 bytes):
{

"app": {

"name": "Example",

"version": "1.0.0",

"config": {

"port": 3000,

"host": "localhost"

}

}

}

YAML (185 bytes):
app:

name: Example

version: 1.0.0

config:

port: 3000

host: localhost

Winner: 🏆 YAML - ~25% più compatto

Strict syntax

JSON:
  • ✅ Regole chiare e rigid
  • ✅ Facile da validare
  • ✅ Meno ambiguità
  • ❌ Meno flessibile

YAML:
  • ⚠️ Più permissivo
  • ⚠️ Indentation-sensitive
  • ⚠️ Multiple ways to write stesso dato
  • ✅ Più human-friendly

Esempio problemi YAML:
# Questo è valido ma pericoloso

norway: NO # Interpretato come false!

sweden: SE # String

# Meglio:

norway: "NO" # String explicit

Winner: 🏆 JSON - Meno errori

Use Cases

Configurazione applicazioni

YAML è migliore: docker-compose.yml:
version: '3.8'

services:

web:

image: nginx:latest

ports:

- "80:80"

volumes:

- ./html:/usr/share/nginx/html

environment:

- NODE_ENV=production

db:

image: postgres:13

environment:

POSTGRES_PASSWORD: secret

Perché YAML:
  • ✅ Più leggibile per configurazioni lunghe
  • ✅ Commenti per documentazione
  • ✅ Multi-line strings
  • ✅ Meno verboso

API REST

JSON è migliore:
// Request

POST /api/users

Content-Type: application/json

{

"name": "Marco",

"email": "marco@example.com",

"preferences": {

"theme": "dark",

"notifications": true

}

}

// Response

{

"success": true,

"user": {

"id": 123,

"name": "Marco",

"createdAt": "2026-01-26T10:00:00Z"

}

}

Perché JSON:
  • ✅ Standard de facto per API
  • ✅ Parsing veloce
  • ✅ Supporto nativo browser
  • ✅ Compact

CI/CD Pipelines

YAML è preferito: GitHub Actions (.github/workflows/ci.yml):
name: CI

on:

push:

branches: [main]

pull_request:

branches: [main]

jobs:

test:

runs-on: ubuntu-latest

steps:

- uses: actions/checkout@v2

- name: Setup Node

uses: actions/setup-node@v2

with:

node-version: '18'

- name: Install dependencies

run: npm ci

- name: Run tests

run: npm test

Perché YAML:
  • ✅ Readability per workflow complessi
  • ✅ Commenti per documentare steps
  • ✅ Multi-line commands
  • ✅ Standard per CI/CD (GitHub, GitLab, CircleCI)

Database storage

JSON è migliore: MongoDB document:
{

"_id": "507f1f77bcf86cd799439011",

"user": {

"name": "Marco",

"email": "marco@example.com"

},

"posts": [

{

"title": "Post 1",

"views": 100

}

],

"createdAt": {"$date": "2026-01-26T10:00:00Z"}

}

Perché JSON:
  • ✅ Supporto nativo in database NoSQL
  • ✅ Parsing performante
  • ✅ Queries direct su JSON
  • ✅ Indexing efficiente

Configuration management

Confronto esempi: package.json (JSON):
{

"name": "my-app",

"version": "1.0.0",

"scripts": {

"dev": "next dev",

"build": "next build",

"start": "next start"

},

"dependencies": {

"next": "^13.0.0",

"react": "^18.0.0"

}

}

tsconfig.json (JSON con commenti):
{

// Compiler options

"compilerOptions": {

"target": "ES2020",

"module": "commonjs",

"strict": true

},

// Files to include

"include": ["src//"]

}

VS Code settings (JSONC):
  • JSON con commenti
  • Best of both worlds

Conversione tra formati

YAML → JSON

Python:
import yaml

import json

# Leggi YAML

with open('config.yaml') as f:

data = yaml.safe_load(f)

# Scrivi JSON

with open('config.json', 'w') as f:

json.dump(data, f, indent=2)

Online tools:
  • yaml-to-json.com
  • convertjson.com/yaml-to-json.htm

JSON → YAML

Python:
import json

import yaml

# Leggi JSON

with open('data.json') as f:

data = json.load(f)

# Scrivi YAML

with open('data.yaml', 'w') as f:

yaml.dump(data, f, default_flow_style=False)

Node.js:
const fs = require('fs');

const yaml = require('js-yaml');

// Read JSON

const json = JSON.parse(fs.readFileSync('data.json', 'utf8'));

// Write YAML

const yamlStr = yaml.dump(json);

fs.writeFileSync('data.yaml', yamlStr);

Pro e Contro

JSON

Pro:
  • ✅ Parsing molto veloce
  • ✅ Syntax rigida = meno errori
  • ✅ Supporto universale
  • ✅ Nativo in browser
  • ✅ Formato standard per API
  • ✅ Tool di validazione maturi

Contro:
  • ❌ No commenti
  • ❌ Più verboso
  • ❌ Multi-line strings scomode
  • ❌ No reference/anchors
  • ❌ Meno human-readable

YAML

Pro:
  • ✅ Molto leggibile
  • ✅ Commenti nativi
  • ✅ Multi-line strings facili
  • ✅ Meno verboso
  • ✅ Anchors & references
  • ✅ Ottimo per config files

Contro:
  • ❌ Parsing più lento
  • ❌ Indentation errors comuni
  • ❌ Ambiguità possibili
  • ❌ Security concerns (arbitrary code exec)
  • ❌ Non standard per API

Best Practices

Quando usare JSON

Usa JSON per:

  • API requests/responses
  • Data storage in database
  • Browser-based applications
  • Performance-critical applications
  • Data exchange tra sistemi
  • Quando serve strict validation

Quando usare YAML

Usa YAML per:

  • Configuration files
  • CI/CD pipelines
  • Docker Compose
  • Kubernetes manifests
  • Ansible playbooks
  • Documentation con codice

Hybrid approach

package.json + .yarnrc.yml:
# .yarnrc.yml (config Yarn)

nodeLinker: node-modules

yarnPath: .yarn/releases/yarn-3.2.0.cjs

// package.json (metadata progetto)

{

"name": "my-app",

"version": "1.0.0"

}

Conclusione

Scegli JSON se:
  • 🚀 Performance è critica
  • 🔄 Hai API REST
  • 💾 Usi database NoSQL
  • 🌐 Lavori con browser
  • ✅ Vuoi validation rigorosa

Scegli YAML se:
  • 📝 Hai config files complesse
  • 👥 Readability è priorità
  • 💬 Hai bisogno di commenti
  • 🔧 Lavori con DevOps/CI/CD
  • 📚 Documenti configurazione

Non c'è un "vincitore" assoluto - usa lo strumento giusto per il caso d'uso! Tabella decisionale rapida:

| Use Case | Formato | Motivo |

|----------|---------|--------|

| REST API | JSON | Standard, veloce |

| Config file | YAML | Leggibile, commenti |

| Database | JSON | Performance, supporto |

| CI/CD | YAML | Readability |

| Browser data | JSON | Nativo |

| Infrastructure as Code | YAML | Chiaro, documenta |

Share:

Articoli Correlati

Read in English