Conversor JSONL / NDJSON ↔ JSON
FormatoTodo se ejecuta en tu navegador: no se sube nada
Combina JSONL (también llamado NDJSON: un valor JSON por línea) en un array JSON, o divide un array JSON en líneas. Los registros, las exportaciones de datos y las API en streaming producen este formato sin parar. «Un valor JSON por línea» es toda la convención, así que aquí se analiza línea a línea y se nombra la línea que falla: en un archivo de miles de líneas, «error al analizar» no dice nada. Las líneas vacías se saltan (un salto final es lo normal) y también se tratan CRLF y BOM. ⚠️ Un error habitual: pegar un objeto JSON de varias líneas ya formateado no funciona. Se parece, pero no es JSONL: cada línea tiene que ser un valor JSON completo *por sí sola*. Ese caso da un error claro que explica por qué. ⚠️ Un límite de precisión que aquí no se puede arreglar: los enteros por encima de 2^53 no caben en JSON (los ID de tipo copo de nieve son el caso típico) y `JSON.parse` convierte `9007199254740993` en `...992`. Es algo intrínseco a JSON y JavaScript, y afecta a cualquier herramienta basada en `JSON.parse`. Si tus datos llevan ID así, haz que el origen los emita como cadenas.
Funciones
- Las dos direcciones: JSONL → array JSON y array JSON → JSONL
- Se analiza línea a línea y, al fallar, se indica qué línea es (contando las líneas vacías saltadas, para que coincida con tu archivo)
- Se saltan las líneas vacías; se aceptan CRLF y LF; se quita un BOM inicial
- Pegar un JSON de varias líneas formateado da un error claro que explica que cada línea debe ser un valor JSON completo
- En JSON → JSONL se comprueba que el nivel superior sea un array en vez de emitir una sola línea en silencio
- Los saltos dentro de las cadenas se escapan, así que cada línea de salida sigue siendo analizable por sí sola
- Sangrado del JSON con 2 o 4 espacios, tabulador, o todo en una línea
Cómo se usa
- Pega JSONL, o pega un array JSON
- El JSONL de varias líneas se detecta solo; un objeto JSON de una sola línea necesita que fijes la dirección a mano
- El resultado se actualiza mientras escribes
- Copia el resultado
Preguntas frecuentes
- ¿Por qué pide un array cuando pego JSON?
- Porque «un documento JSON» y «una línea de JSONL» son idénticos: un `{"a":1}` suelto es a la vez un JSON válido y una línea de JSONL válida, y nada puede deshacer esa ambigüedad automáticamente. Así que en modo automático, todo lo que se analice como JSON se trata como JSON → JSONL, y esa dirección exige que el nivel superior sea un array (un elemento por línea). Para tratar un objeto suelto como una línea de JSONL, fija la dirección a «JSONL → JSON» a mano.
- ¿Por qué falló mi JSON ya formateado?
- Porque no es JSONL. La convención de JSONL es que cada línea sea un valor JSON completo por sí sola, y un JSON formateado reparte un objeto entre varias líneas: la primera, `{`, no es JSON válido por sí misma. Esta herramienta analiza línea a línea, así que falla en la línea 1 y lo dice. O comprimes ese JSON a una sola línea primero (el formateador JSON de aquí tiene una opción compacta), o lo pegas como array y dejas que tome la otra dirección.
- ¿Los enteros grandes (ID de Twitter, por ejemplo) pierden precisión?
- Sí, y esta herramienta no puede evitarlo. Los enteros por encima de 2^53 no tienen representación exacta en los números de JavaScript, y `JSON.parse` convierte `9007199254740993` en `9007199254740992`, perdiendo los últimos dígitos sin avisar. Es algo intrínseco a JSON y JavaScript, no un defecto de esta implementación: todo lo que se apoye en `JSON.parse` se comporta igual, incluido `response.json()` en el navegador. La única solución es que el origen emita esos ID como cadenas (`"9007199254740993"`), lo que conserva todos los dígitos.
- ¿Las líneas vacías se convierten en registros vacíos?
- No, se saltan. Un salto final o líneas en blanco de más entre registros son normales al editar, y convertirlas en registros `null` o de cadena vacía solo ensuciaría los datos. Por la misma razón se recorta el espacio al principio y al final de cada línea: no puede afectar al contenido, porque el espacio no significa nada en JSON.
Herramientas relacionadas
Formateador JSON
FormatoFormatea, valida y repara JSON en línea: árbol plegable, búsqueda de claves y valores, edición nodo a nodo y errores con línea y columna.
Conversor CSV
FormatoConvierte CSV / TSV y JSON en ambos sentidos: detecta el delimitador, cita bien los campos, quita el BOM de Excel y solo numera lo que no pierde datos.
JSON a código
FormatoConvierte una muestra JSON en interfaces de TypeScript, structs de Go, clases de Java o structs de Rust; las claves que faltan salen opcionales.
Formateador SQL
FormatoFormatea SQL en línea: una cláusula por línea, palabras clave con el mismo estilo y subconsultas sangradas. El minificador quita los comentarios.
Conversor JSON5
FormatoPasa JSON5 a JSON estricto: comentarios, claves sin comillas, comillas simples, comas finales, hexadecimal e Infinity, con errores por línea y columna.
Formateador XML
FormatoFormatea XML en línea por niveles de etiqueta, con comentarios, CDATA y DOCTYPE en su propia línea y los valores de atributo intactos.