piapia123
es

Conversor JSONL / NDJSON ↔ JSON

Formato

Todo se ejecuta en tu navegador: no se sube nada

Entrada
Arrastra un archivo aquí para cargarlo
Resultado

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

  1. Pega JSONL, o pega un array JSON
  2. 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
  3. El resultado se actualiza mientras escribes
  4. 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