Skip to content
SP StackPractices
beginner Por StackPractices

Analizar Archivos TOML

Cómo analizar archivos de configuración TOML en Python, Java y JavaScript.

Temas: data

Nota para desarrolladores hispanohablantes: Esta guía incluye ejemplos y convenciones de nomenclatura adaptadas a equipos que trabajan en español. Cuando existen diferencias significativas en terminología técnica entre el inglés y el español, se indican explícitamente para facilitar la comunicación en equipos multiculturales.

Visión General

TOML (Tom’s Obvious, Minimal Language) es un formato de archivo de configuración diseñado para ser más legible que JSON y más simple que YAML. Es el estándar para Cargo.toml de Rust, pyproject.toml de Python y muchas herramientas modernas. Analizar TOML programáticamente habilita gestión automatizada de configuración, overrides específicos por ambiente y tooling para package managers.

Cuándo Usar

Usa este recurso cuando:

  • Leas pyproject.toml, Cargo.toml o config.toml en build scripts o pipelines CI/CD
  • Construyas herramientas de desarrollo que necesiten analizar archivos de configuración de proyecto
  • Migres de INI o JSON a un formato de config más expresivo
  • Valides configuración de herramientas antes de la ejecución

Solución

Python

# tomllib está incluido en la librería estándar de Python 3.11+
# Para Python < 3.11: pip install tomli
import tomllib

with open('pyproject.toml', 'rb') as f:
    config = tomllib.load(f)

print(config['project']['name'])
print(config['tool']['pytest']['ini_options'])
# Escribir TOML requiere el paquete de terceros `tomli-w`
# pip install tomli-w
import tomli_w

data = {'project': {'name': 'myapp', 'version': '1.0.0'}}
with open('output.toml', 'wb') as f:
    tomli_w.dump(data, f)

JavaScript

// @iarna/toml es un parser TOML robusto para Node.js
// npm install @iarna/toml
import toml from '@iarna/toml';
import fs from 'fs';

const doc = toml.parse(fs.readFileSync('config.toml', 'utf8'));
console.log(doc.database.host);
// Volcar objetos a TOML
import toml from '@iarna/toml';

const data = { app: { name: 'myapp', debug: false } };
console.log(toml.stringify(data));

Java

// tomlj es un parser TOML moderno para Java
// Maven: org.tomlj:tomlj
import org.tomlj.Toml;
import org.tomlj.TomlTable;

public class TomlParser {
    public static void main(String[] args) throws Exception {
        TomlTable table = Toml.parse("config.toml");
        String host = table.getString("database.host");
        System.out.println(host);
    }
}

Explicación

TOML usa una gramática estricta y no ambigua: pares clave-valor, arrays, tablas inline y secciones estándar de tabla/cabecera ([section] / [[array-of-tables]]). A diferencia de YAML, TOML no depende de indentación, haciéndolo menos propenso a errores en edición manual. Fechas y horas usan formato ISO 8601, y strings soportan formas literal ('...') y básica ("...") con reglas de escape diferentes.

Python 3.11 agregó tomllib a la librería estándar, eliminando la necesidad de paquetes externos para parsing. Para escribir TOML, tomli-w sigue siendo el estándar. Los ecosistemas JavaScript y Java requieren librerías de terceros porque TOML no está soportado nativamente.

Variantes

TecnologíaLibreríaEnfoqueNotas
Pythontomllibload()Librería estándar desde 3.11, solo lectura
Pythontomliload()Backport para < 3.11, API idéntica
Pythontomli-wdump()Estándar para escribir TOML
JavaScript@iarna/tomlparse() / stringify()Rápido, compliant con spec
JavatomljToml.parse()Moderno, soporta acceso por dotted keys
Javatoml4jToml.read()Más antiguo pero ampliamente usado

Mejores Prácticas

  • Usa tomllib en Python 3.11+ en lugar de paquetes toml o tomli deprecados para lectura
  • Quottea strings con caracteres especiales para evitar ambigüedad en parsers TOML
  • Usa dotted keys (database.host) en lugar de tablas anidadas cuando sea posible para configs más planas
  • Mantén arrays de tablas ([[...]]) simples: La anidación profunda hace los archivos difíciles de leer
  • Versiona tu pyproject.toml cuidadosamente porque afecta la resolución de paquetes

Errores Comunes

  • Usar tomllib para escribir TOML: Es solo lectura; usa tomli-w para serialización
  • Olvidar modo rb en Python: tomllib.load() requiere modo binario, no texto
  • Mezclar dotted keys con headers de tabla: key = 1 bajo [section] y [section.key] son diferentes
  • Asumir que TOML preserva orden de claves: La spec garantiza orden para arrays pero no necesariamente para tablas en todos los parsers
  • No escapar backslashes en strings básicas: Usa strings literales ('...') para paths Windows y regex patterns

Preguntas Frecuentes

¿Debo usar TOML o YAML para la configuración de mi proyecto?

Usa TOML cuando la config sea plana, simple y editada por desarrolladores (e.g., pyproject.toml, configs de herramientas). Usa YAML cuando necesites estructuras anidadas complejas, anchors o extensa documentación en comentarios. Usa JSON para configs generados por máquinas y contratos de API.

¿Puedo validar TOML contra un JSON Schema?

TOML parsea en las mismas estructuras de datos que JSON (maps, arrays, escalares). Después de parsear, valida el objeto resultante contra un JSON Schema usando los mismos validadores que usas para JSON. No existe un equivalente nativo de “TOML Schema”, aunque la spec de TOML misma enforcea reglas de sintaxis.

¿Cómo mergeo múltiples archivos TOML?

Parsea cada archivo independientemente, luego haz deep-merge de los diccionarios/maps resultantes. Python deepmerge, JavaScript lodash.merge y Java Map.merge() pueden combinar configs. Implementa reglas de override (e.g., local.toml overridea base.toml) explícitamente en tu lógica de aplicación.