Validatore e linter YAML — Trova errori e insidie nascoste

Valida il YAML con riga e colonna esatte di ogni errore e individua gli sbagli che i parser accettano in silenzio: booleani yes/no, tabulazioni, chiavi duplicate.

16 righe
YAML non valido alla riga 15, colonna 5: duplicated mapping key: la stessa chiave compare due volte nella stessa mappa.
13 image: postgres:16
14 restart: always
15 restart: unless-stopped
^
Lint (5)
services:
  web:
    image: nginx:1.27
    ports:
      - '8080:80'
      - '22:22'
    environment:
      COUNTRY: 'NO'
      DEBUG: 'yes'
      APP_VERSION: 1.1
  db:
    image: postgres:16
    restart: unless-stopped

Chiavi duplicate: viene mostrato l'ultimo valore, che è ciò che molti parser fanno in silenzio. La vista formattata viene ricostruita dai dati analizzati, quindi commenti e ancore non vengono mantenuti. Correggi i problemi nel file originale.

Funziona interamente nel tuo browser. Il tuo YAML non viene mai caricato, quindi i segreti nei file di configurazione restano sul tuo computer. Sfoglia tutti gli strumenti gratuiti.

Hai trovato un problema o qualcosa che potrebbe andare meglio? Leggiamo ogni messaggio e sistemiamo le cose in fretta.

Questo validatore YAML gratuito controlla un file YAML alla ricerca di errori di sintassi e mostra riga e colonna esatte, con le righe circostanti e un accento circonflesso sotto il problema. Incolla un manifest Kubernetes, un docker-compose.yml, un workflow di GitHub Actions o una specifica OpenAPI e sai in un secondo se viene analizzato correttamente e, in caso contrario, dove si rompe.

Che un parser accetti il tuo file non significa che il file voglia dire ciò che pensi. Il linter segnala anche i valori che i parser YAML 1.1 (PyYAML, SnakeYAML, Go yaml.v2) leggono diversamente da YAML 1.2: NO diventa false, 0755 diventa 493, 22:22 diventa 1342 e 1.10 diventa 1.1. Elenca ogni chiave duplicata con entrambi i numeri di riga, le tabulazioni nel rientro e "key:value" scritto senza spazio. Verifica la sintassi e queste insidie; non valida rispetto a uno schema come l'API di Kubernetes.

Come si usa

  1. Incolla il tuo YAML nell'editor. È caricato un esempio docker-compose con alcuni errori voluti per mostrare cosa viene segnalato.
  2. Leggi la barra di stato: verde significa valido, rosso mostra l'errore con riga e colonna e le righe intorno.
  3. Fai clic su una voce dell'elenco del linter per saltare a quella riga nell'editor e correggerla.
  4. Passa dalla vista YAML formattata a quella JSON per controllare come è stato davvero analizzato il file: è qui che le sorprese con yes/no o 0755 diventano evidenti.
  5. Copia o scarica l'output formattato se ti serve, e continua a correggere il file originale per conservarne i commenti.

Domande frequenti

Cos'è il problema della Norvegia in YAML?

In YAML 1.1, le parole senza virgolette y, yes, n, no, on e off (in qualsiasi combinazione comune di maiuscole e minuscole) sono booleani. Quindi un elenco di codici paese che contiene NO per la Norvegia restituisce false invece della stringa "NO". YAML 1.2 (2009) ha risolto il problema: solo true e false sono booleani. Molti parser molto diffusi seguono ancora la 1.1, tra cui PyYAML, Psych di Ruby, SnakeYAML di Java e yaml.v2 di Go, quindi la soluzione sicura è mettere tra virgolette questi valori: "NO", "yes", "on".

Perché in YAML non sono ammesse le tabulazioni?

La specifica YAML vieta le tabulazioni per il rientro perché la loro larghezza non è definita, e il rientro è il modo in cui YAML esprime la struttura. Le tabulazioni sono ammesse all'interno dei valori e dei commenti, ma non negli spazi iniziali di una riga. Configura l'editor perché inserisca spazi nei file .yml e .yaml; due spazi per livello è la convenzione più comune.

In YAML sono ammesse chiavi duplicate?

No. La specifica YAML richiede che le chiavi di una mappa siano uniche, ma i parser non sono d'accordo su come comportarsi: alcuni generano un errore (come questo validatore), altri tengono in silenzio l'ultimo valore. Questo rende i duplicati pericolosi: in un manifest lungo puoi modificare la prima occorrenza e non vedere alcun effetto. Questo strumento elenca ogni duplicato con la riga in cui la chiave è stata definita per la prima volta.

Perché il mio YAML dà "bad indentation of a mapping entry"?

O la riga ha un rientro diverso dalle altre chiavi dello stesso livello, oppure un valore contiene due punti seguiti da uno spazio e va messo tra virgolette. Per esempio, title: Note: read this fallisce perché il parser vede una seconda chiave. Scrivi title: "Note: read this". Controlla la riga indicata e quella sopra; l'errore spesso inizia sulla riga precedente.

YAML è un sovrainsieme di JSON?

YAML 1.2 è stato progettato in modo che un JSON valido sia anche YAML valido, e in pratica qualsiasi documento JSON viene analizzato qui. Il contrario non vale: YAML aggiunge commenti, ancore e alias, stringhe su più righe e più documenti per file. Usa la vista JSON per vedere come un file YAML si traduce in semplici dati JSON.

Valida gli schemi di Kubernetes o GitHub Actions?

No. Verifica la sintassi YAML e le insidie descritte sopra, che causano la maggior parte dei problemi reali, ma non sa quali chiavi siano ammesse in un Deployment di Kubernetes o in un workflow di GitHub. Per la validazione dello schema usa kubectl apply --dry-run=server, kubeconform o l'estensione YAML per VS Code con il JSON Schema corrispondente.

YAML 1.1 e YAML 1.2: valori che cambiano significato

Questo validatore analizza con le regole di YAML 1.2 (js-yaml). Se il tuo file viene letto da un parser YAML 1.1, questi valori senza virgolette significano altro, e il linter avvisa per ciascuno:

• yes, no, on, off, y, n → booleani in 1.1, stringhe in 1.2. I workflow di GitHub Actions iniziano con on:, che un parser 1.1 legge come la chiave true.

• 0755 → ottale 493 in 1.1, decimale 755 in 1.2. Ne soffrono sia i permessi dei file sia i CAP con lo zero iniziale.

• 22:22 → 1342 in 1.1 (base 60), la stringa "22:22" in 1.2. La documentazione di Docker Compose consiglia di mettere tra virgolette le mappature delle porte proprio per questo motivo.

• 1.10 → il numero 1.1 in entrambe le versioni. Metti tra virgolette i numeri di versione.

• 2024-01-05 → un timestamp nella maggior parte dei parser, non una stringa.

La regola che li evita tutti: metti tra virgolette qualsiasi valore che deve essere testo ma sembra qualcos'altro.

Errori YAML comuni e come correggerli

• "bad indentation of a mapping entry": rientro incoerente, oppure un valore senza virgolette che contiene ": ".

• "end of the stream or a document separator is expected": di solito una riga con un rientro minore delle righe allo stesso livello, o del testo dopo una virgoletta di chiusura.

• "can not read a block mapping entry; a multiline key may not be an implicit key": spesso mancano i due punti sulla riga precedente, oppure una virgoletta è stata aperta e non chiusa.

• "unexpected end of the stream within a double quoted scalar": un " non chiuso da qualche parte sopra la riga indicata.

• I valori che iniziano con @, `, *, &, !, | o > hanno un significato speciale o sono riservati. Mettili tra virgolette.

• Un # preceduto da uno spazio inizia un commento, quindi password: abc #123 memorizza abc. Metti tra virgolette i valori che contengono " #".

Strumenti gratuiti correlati

  • Formattatore JSON — Formatta, minifica e valida JSON, con gli errori di parsing localizzati per riga e colonna. Nel tuo browser, senza upload.
  • Da JSON a TypeScript — Incolla un esempio JSON e ottieni interfacce TypeScript, uno schema Zod, un JSON Schema o tipi per Go, Python, Java, C#, Kotlin, Swift e Rust.
  • Formattatore SQL — Trasforma SQL disordinato in query leggibili e indentate in modo coerente per PostgreSQL, MySQL, T-SQL, BigQuery e altri. Funziona nel browser.
  • Tester regex — Prova un'espressione regolare su un testo di esempio con evidenziazione delle corrispondenze in tempo reale, gruppi di cattura e anteprima della sostituzione. Gratis, nel browser.
  • Confronto testi (diff) — Confronta due versioni di un testo, di codice o di un file JSON e vedi esattamente quali righe, parole e caratteri sono cambiati.