Validador de YAML simples
Cole um YAML e veja na hora se ele está correto, com a linha do erro de indentação. Cobre um subconjunto do YAML usado em configurações.
Processamento local: nada do que você digita sai do seu navegador.
Como usar
Cole o YAML na caixa. A cada tecla ele é interpretado e, se estiver correto, mostramos o resultado convertido em JSON, o que ajuda a conferir o que o YAML realmente representa. Se houver erro, apontamos a linha e a coluna e mostramos o trecho com um marcador.
O que é suportado
- Mapas (
chave: valor) e listas (- item), aninhados por indentação com espaços. - Valores: texto, números,
true/false,nullou~, e texto entre aspas simples ou duplas. - Listas e mapas em linha:
[a, b]e{k: v}. - Blocos de texto com
|e>, e comentários com#.
Limitações
É um subconjunto do YAML 1.2. Não são suportados âncoras e aliases (&, *), tags (!!), vários documentos no mesmo arquivo, chaves complexas e a mescla <<. Mostramos apenas o primeiro erro encontrado. Em YAML a indentação precisa ser feita só com espaços, nunca com tabulação, e é a causa mais comum de erro.
Como implementar em código
Exemplos prontos para usar no seu projeto.
// npm install js-yaml
import yaml from 'js-yaml';
const texto = `
servico: api
portas:
- 80
- 443
erro: indentação torta
`;
try {
const dados = yaml.load(texto);
console.log(dados);
} catch (e) {
// e.mark.line começa em 0
console.log(`erro na linha ${e.mark.line + 1}, coluna ${e.mark.column + 1}: ${e.reason}`);
}# pip install pyyaml
import yaml
texto = """
servico: api
portas:
- 80
- 443
erro: indentação torta
"""
try:
dados = yaml.safe_load(texto) # safe_load não executa código arbitrário
print(dados)
except yaml.YAMLError as e:
mark = getattr(e, "problem_mark", None)
if mark:
print(f"erro na linha {mark.line + 1}, coluna {mark.column + 1}: {e.problem}")
else:
print(e)package main
// go get gopkg.in/yaml.v3
import (
"fmt"
"gopkg.in/yaml.v3"
)
func main() {
texto := "servico: api\nportas:\n - 80\n - 443\n erro: indentação torta\n"
var dados map[string]any
if err := yaml.Unmarshal([]byte(texto), &dados); err != nil {
fmt.Println("erro:", err) // ex.: yaml: line 5: mapping values are not allowed in this context
return
}
fmt.Println(dados)
}// pubspec.yaml: dependencies: yaml: ^3.1.0
import 'package:yaml/yaml.dart';
void main() {
const texto = 'servico: api\nportas:\n - 80\n - 443\n erro: indentação torta\n';
try {
final dados = loadYaml(texto);
print(dados);
} on YamlException catch (e) {
final linha = e.span?.start.line; // começa em 0
print('erro na linha ${linha == null ? "?" : linha + 1}: ${e.message}');
}
}// Maven: org.yaml:snakeyaml
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.error.MarkedYAMLException;
public class YamlCheck {
public static void main(String[] args) {
String texto = "servico: api\nportas:\n - 80\n - 443\n erro: indentação torta\n";
try {
Object dados = new Yaml().load(texto);
System.out.println(dados);
} catch (MarkedYAMLException e) {
var m = e.getProblemMark(); // linha e coluna começam em 0
System.out.println("erro na linha " + (m.getLine() + 1) + ", coluna " + (m.getColumn() + 1)
+ ": " + e.getProblem());
}
}
}<?php
// composer require symfony/yaml
require 'vendor/autoload.php';
use Symfony\Component\Yaml\Yaml;
use Symfony\Component\Yaml\Exception\ParseException;
$texto = "servico: api\nportas:\n - 80\n - 443\n erro: indentação torta\n";
try {
$dados = Yaml::parse($texto);
print_r($dados);
} catch (ParseException $e) {
echo 'erro na linha ', $e->getParsedLine(), ': ', $e->getMessage(), PHP_EOL;
}// dotnet add package YamlDotNet
using System;
using YamlDotNet.Core;
using YamlDotNet.Serialization;
class Program
{
static void Main()
{
var texto = "servico: api\nportas:\n - 80\n - 443\n erro: indentação torta\n";
try
{
var dados = new DeserializerBuilder().Build().Deserialize<object>(texto);
Console.WriteLine("YAML válido");
}
catch (YamlException e)
{
Console.WriteLine($"erro na linha {e.Start.Line}, coluna {e.Start.Column}: {e.Message}");
}
}
}Perguntas frequentes
Por que a tabulação é erro em YAML?
A especificação proíbe tabs na indentação, pois a estrutura do documento depende da quantidade exata de espaços. Configure o editor para inserir espaços ao apertar Tab.
Esta ferramenta aceita todo YAML válido?
Não. Ela aceita apenas o subconjunto descrito acima. Um YAML válido com âncoras, tags ou vários documentos será apontado como não suportado, mesmo que outro parser o aceite.
Por que yes, no e on não viram booleano?
No YAML 1.2 só true e false são booleanos. Os valores yes, no, on e off eram booleanos no YAML 1.1 e aqui são tratados como texto.
Veja também
Precisa de um sistema ou app sob medida?
A VcInova desenvolve software, aplicativos e integrações para empresas de todo o Brasil.
Fale com a VcInova