← Tutti gli articoli

Come formattare JSON: pretty-print, validare e pulire file JSON

Formatta JSON con JSON.stringify in JavaScript, json.dumps in Python, jq da riga di comando o istantaneamente nel browser. Include ordinare le chiavi, convertire YAML e CSV in JSON ed esempi reali prima/dopo.

Il JSON grezzo da un'API o da un file di log spesso arriva in un'unica riga ininterrotta —— valido, ma impossibile da leggere a colpo d'occhio. Formattare il JSON (chiamato anche „pretty-print“ o „abbellire“) aggiunge indentazione coerente e a-capo perché la struttura sia immediatamente chiara. Questa guida mostra come formattare un file o una stringa JSON in JavaScript, Python, da riga di comando e direttamente nel browser.

Cosa significa „formattare JSON“?

Un formattatore JSON prende una stringa JSON compatta o con indentazione non coerente e la riscrive con:

  • Ogni coppia chiave–valore sulla propria riga
  • Oggetti e array annidati con un numero fisso di spazi (di solito 2 o 4)
  • Nessuno spazio a fine riga
// Prima di formattare (minificato)
{"user":{"name":"Alice","age":30,"roles":["admin","editor"]}}

// Dopo aver formattato (2 spazi)
{
  "user": {
    "name": "Alice",
    "age": 30,
    "roles": [
      "admin",
      "editor"
    ]
  }
}

Le due forme sono semanticamente identiche —— qualunque parser JSON produce la stessa struttura di dati da entrambe. Formattare è puramente per leggibilità umana.

Come formattare JSON in JavaScript

JSON.stringify() accetta un secondo argomento (un replacer) e un terzo (il livello di indentazione). Passa null come replacer e 2 per 2 spazi di indentazione (l'API completa in Come fare Stringify di JSON):

const obj = { user: { name: "Alice", age: 30, roles: ["admin", "editor"] } };

// Compatto (niente formattazione)
JSON.stringify(obj);

// Abbellito con 2 spazi
JSON.stringify(obj, null, 2);

// 4 spazi
JSON.stringify(obj, null, 4);

// Tabulazione
JSON.stringify(obj, null, '\t');

Formattare una stringa JSON (non un oggetto)

Se hai già una stringa JSON valida ma malformattata, fai prima il parse e poi di nuovo stringify:

const raw = '{"name":"Alice","age":30}';
const formatted = JSON.stringify(JSON.parse(raw), null, 2);
console.log(formatted);

Ordinare le chiavi alfabeticamente

Per ordinare le chiavi dell'oggetto durante la formattazione, passa una funzione replacer che ordini le chiavi di ogni oggetto incontrato:

function sortedStringify(obj, indent = 2) {
  return JSON.stringify(obj, (key, value) => {
    if (value && typeof value === 'object' && !Array.isArray(value)) {
      return Object.keys(value).sort().reduce((acc, k) => {
        acc[k] = value[k];
        return acc;
      }, {});
    }
    return value;
  }, indent);
}

Come formattare JSON in Python

Il modulo json integrato di Python gestisce la formattazione con il parametro indent:

import json

# Formatta un dict Python
data = {"user": {"name": "Alice", "age": 30, "roles": ["admin", "editor"]}}
formatted = json.dumps(data, indent=2)
print(formatted)

# Formatta una stringa JSON
raw = '{"name":"Alice","age":30}'
formatted = json.dumps(json.loads(raw), indent=2)

# Ordina le chiavi
formatted = json.dumps(data, indent=2, sort_keys=True)

# Formatta un file JSON
with open('input.json') as f:
    data = json.load(f)
with open('output.json', 'w') as f:
    json.dump(data, f, indent=2)

Come formattare un file JSON da riga di comando

Usando jq (consigliato)

jq è il processore JSON standard da riga di comando. Formatta JSON di default:

# Abbellisce un file JSON
jq . input.json

# Abbellisce e salva su un altro file
jq . input.json > output.json

# Formatta la risposta di curl
curl -s https://api.example.com/users | jq .

# Ordina le chiavi
jq --sort-keys . input.json

Usando Python (senza installare nulla)

Il modulo json.tool di Python funziona come formattatore da riga di comando su qualunque sistema con Python:

# Formatta un file
python3 -m json.tool input.json

# Da standard input
echo '{"name":"Alice","age":30}' | python3 -m json.tool

# Ordina le chiavi
python3 -m json.tool --sort-keys input.json

Usando Node.js

node -e "const fs=require('fs'); const d=JSON.parse(fs.readFileSync('input.json')); console.log(JSON.stringify(d,null,2))"

Come convertire dati in formato JSON

„Format to JSON“ di solito significa serializzare dati da un altro formato —— un dict di Python, un file CSV, una configurazione YAML —— in JSON valido.

Da YAML a JSON

# Python
import yaml, json
with open('config.yaml') as f:
    data = yaml.safe_load(f)
print(json.dumps(data, indent=2))

Oppure usa il convertitore YAML in JSON nel browser —— niente codice. Per quando scegliere ciascun formato, vedi JSON vs YAML; per lo sfondo sul perché YAML 1.2 è un superset proprio di JSON, vedi Compatibilità YAML 1.2 con JSON.

Da CSV a JSON

import csv, json
with open('data.csv') as f:
    rows = list(csv.DictReader(f))
print(json.dumps(rows, indent=2))

Da un oggetto JavaScript

Gli oggetti JavaScript sembrano JSON ma non lo sono —— possono avere chiavi senza virgolette, stringhe con apici singoli, virgole finali e commenti. Incolla un literal di oggetto JavaScript non valido in JSON Fix per convertirlo automaticamente in JSON valido.

Formattare JSON nell'editor (Prettier, VS Code, pre-commit)

Nell'uso quotidiano, il momento più utile per formattare JSON è al salvataggio —— così non arriva mai senza formattazione in git o in una PR.

Prettier

# installa
npm i -D prettier

# formatta in-place ogni .json (e sorgente)
npx prettier --write "**/*.{json,jsonc}"

# solo check (amichevole con CI, esce con codice != 0 se serve formattazione)
npx prettier --check "**/*.json"

Prettier supporta JSON e JSONC out of the box. Un .prettierrc di due righe come { "tabWidth": 2 } di solito basta.

VS Code —— Format on Save

Installa l'estensione Prettier e aggiungi al tuo settings.json di workspace:

{
  "editor.formatOnSave": true,
  "[json]":   { "editor.defaultFormatter": "esbenp.prettier-vscode" },
  "[jsonc]":  { "editor.defaultFormatter": "esbenp.prettier-vscode" }
}

Hook pre-commit

Per impedire commit di JSON non formattato, collega lint-staged + husky:

// package.json
{
  "lint-staged": { "*.{json,jsonc}": "prettier --write" }
}

# installa l'hook
npx husky add .husky/pre-commit "npx lint-staged"

Esempio di formato JSON: prima e dopo

// Non formattato —— valido ma illeggibile
{"orders":[{"id":1001,"customer":{"name":"Alice"},"items":[{"sku":"A1","qty":2}]}]}

// Formattato
{
  "orders": [
    {
      "id": 1001,
      "customer": { "name": "Alice" },
      "items": [ { "sku": "A1", "qty": 2 } ]
    }
  ]
}

Domande frequenti

Come formatto JSON in JavaScript?

Usa JSON.stringify(value, null, 2) —— il terzo argomento definisce l'indentazione (2 spazi, 4 spazi o '\t' per tabulazioni). Per formattare una stringa JSON esistente, fai prima il parse: JSON.stringify(JSON.parse(raw), null, 2).

Come faccio pretty-print di JSON da riga di comando?

Usa jq . file.json (formatta di default) o python3 -m json.tool file.json se non hai jq. Aggiungi --sort-keys per ordinare le chiavi alfabeticamente.

Qual è la differenza tra formattare e minificare JSON?

Formattare aggiunge spazi per migliorare la lettura; minificare li toglie per ridurre la dimensione. Sono opposti esatti e entrambi preservano i dati. Vedi Come minificare JSON.

Formattare JSON cambia i dati?

No. Indentazione e a-capo sono whitespace senza significato in JSON —— qualunque parser produce la stessa struttura di dati da input compatto o abbellito.

Formatta JSON online —— niente installazione

Se devi formattare una stringa JSON adesso senza scrivere codice, JSON Fix formatta il tuo JSON all'istante. Incolla il JSON, clicca Format e copia il risultato. Ripara anche errori comuni (virgole finali, apici singoli, chiavi senza virgolette) prima di formattare, quindi funziona anche se il tuo JSON non è ancora valido.