~/tools / LLM JSON Repair
LLM JSON Repair — Arregla el JSON roto que devolvió un modelo de IA
Arregla el casi-JSON que devuelven los modelos de IA: quita los bloques de código y el texto de relleno, elimina comas finales y comentarios, corrige comillas, claves y valores de Python, y enumera exactamente qué cambió. Nada sale de tu navegador.
Solo se aplican las correcciones que tienen una respuesta clara. Todo lo demás se informa con su posición en lugar de adivinarse.
Todo se ejecuta en tu navegador. El texto que pegas no se sube.
Los modelos de lenguaje suelen envolver el JSON en un bloque de código y una frase, y luego rompen la sintaxis: una coma final, comillas simples, un comentario, True en lugar de true. JSON.parse rechaza todo eso. Esta herramienta localiza el JSON dentro del texto y repara solo los problemas que tienen una única solución clara; después enumera cada cambio para que puedas valorarlo. Si la salida quedó cortada, cierra lo que estaba abierto y te avisa de que pueden faltar datos. No adivina: la entrada que no puede reparar se informa con su posición en lugar de modificarse en silencio.
Casos de uso
- Corregir la respuesta de un modelo antes de pasarla a JSON.parse o guardarla en un archivo de configuración
- Limpiar una respuesta que trae un bloque de código y una explicación alrededor del JSON
- Revisar qué cambió, para que un valor reparado no llegue a producción sin que nadie lo note
Cómo usarlo
- Pega la respuesta del modelo o carga el ejemplo.
- Lee el JSON reparado y la lista de cambios que aparece debajo.
- Copia el resultado. Los cambios marcados en ámbar pueden perder información, así que revísalos.
Qué cuenta como JSON válido
- Las cadenas y los nombres de miembro usan solo comillas dobles. Las comillas simples no forman parte de la gramática.
- No hay comentarios. El único relleno permitido son los espacios en blanco.
- La coma va solo entre miembros o elementos, así que una coma final no está permitida.
- Un valor es un objeto, un arreglo, un número o una cadena, o uno de false, null y true. Infinity, NaN y undefined no son valores JSON.
- Los números no pueden tener un cero a la izquierda ni un + inicial, y un punto decimal necesita dígitos a ambos lados, así que 012, +5, .5 y 5. no son válidos.
- Los caracteres de control de U+0000 a U+001F dentro de una cadena deben escaparse, de modo que un salto de línea sin escapar en una cadena no es válido.
- El nivel superior puede ser cualquier valor, no solo un objeto o un arreglo.
Cómo suele romperse la salida de un modelo
| Problema | Ejemplo | Qué hace esta herramienta |
|---|---|---|
| Bloque de código y texto de relleno | Sure! ```json { … } ``` Hope this helps | Toma solo el JSON |
| Coma final | [1, 2,] | Quita la coma |
| Comentario | {"a": 1 // note} | Quita el comentario |
| Comillas simples | {'a': 'b'} | Usa comillas dobles |
| Clave sin comillas | {a: 1} | Pone comillas a la clave |
| Valores de Python | {"ok": True, "x": None} | Escribe true y null |
| Salto de línea sin escapar en una cadena | "línea uno⏎línea dos" | Lo escapa como \n |
| NaN o undefined | {"x": NaN} | Escribe null y avisa de que el valor se pierde |
| Respuesta cortada | {"items": [{"id": 1}, {"id": | Cierra lo que está abierto y avisa de que pueden faltar datos |
Qué es seguro reparar y qué no
Una reparación es segura cuando el texto roto admite una sola lectura sensata. Una coma final, un comentario o un bloque de código se pueden quitar sin cambiar lo que dicen los datos. Otros cambios alteran el significado, por eso se marcan y conviene que los revises: cerrar una respuesta que quedó cortada da un JSON válido al que le faltan datos, y convertir NaN en null descarta el valor original.
Hay dos límites que vienen del propio JSON. El RFC 8259 dice que los nombres dentro de un objeto deberían ser únicos y que el comportamiento del software es impredecible cuando no lo son; esta herramienta se queda con el último, igual que JSON.parse. El RFC también dice que el software interopera bien cuando no espera más rango ni precisión que un double IEEE 754. Esta herramienta conserva los números tal como los escribiste, pero un programa que lee un entero muy largo como double lo redondea. Los enteros entre -(2^53)+1 y (2^53)-1 son exactos.
Mejor: pide a la API una salida estructurada
Reparar es un último recurso. Las API de los modelos pueden restringir la salida a un esquema, y los tres proveedores lo documentan de forma distinta.
- OpenAI: Structured Outputs hace que el modelo genere respuestas que se ajustan a tu JSON Schema, mientras que el modo JSON solo garantiza un JSON válido. Una negativa puede no seguir el esquema, y una respuesta que alcanza el límite máximo de tokens está incompleta (estado incomplete, motivo max_output_tokens).
- Anthropic: las salidas estructuradas usan decodificación restringida para que la respuesta siga tu esquema, y la documentación dice que esto se cumple en la mayoría de los casos. Una negativa (stop_reason refusal) o una respuesta cortada por max_tokens puede no coincidir con el esquema, así que comprueba stop_reason antes de analizarla.
- Google Gemini: el modelo se configura para producir JSON que se ajusta al esquema que le das. La corrección semántica no está garantizada, así que valida los valores, y algunas restricciones como minLength y maxLength no se aplican.
Ninguno de los tres documenta una promesa de JSON válido cuando la salida se corta. Comprueba por qué se detuvo el modelo antes de fiarte de un resultado analizado.
Fuentes (comprobadas el 2026-10-23): RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format / OpenAI: Structured Outputs / Anthropic: Structured outputs / Google AI for Developers: Structured output
FAQ
¿Qué arregla?
Quita el bloque de código y el texto que rodea al JSON; elimina las comas finales y los comentarios // o /* */; convierte las comillas simples y las comillas tipográficas en comillas dobles; pone comillas a las claves sin ellas; convierte True, False y None en true, false y null; añade las comas que faltan entre líneas; escapa los saltos de línea sin escapar dentro de las cadenas; y reescribe números como +5, .5 y 0x1F con una forma válida en JSON.
¿Qué no cambia nunca?
Los valores. Las cadenas se conservan carácter por carácter y los números mantienen sus dígitos, de modo que un ID largo como 12345678901234567890 no se redondea. Las claves duplicadas siguen a JSON.parse: gana la última.
¿Y si la respuesta quedó cortada?
Cierra las cadenas, arreglos y objetos abiertos y descarta una clave que aún no tiene valor. Eso hace que el texto sea válido pero no completo, por lo que el resultado se marca como posiblemente con datos faltantes. Pide al modelo que continúe, o sube su límite de salida, en lugar de fiarte de un resultado truncado.
¿Por qué NaN o undefined se convirtieron en null?
JSON no tiene NaN, Infinity ni undefined. La herramienta escribe null en su lugar y lo marca, porque el valor original se pierde.
¿Por qué rechaza algunas entradas?
Cuando no hay una única corrección evidente, como unos puntos suspensivos (...) que sustituyen elementos omitidos, o una palabra suelta donde debería haber un valor, se detiene y muestra dónde, en lugar de adivinar.
¿Se envía el texto a un servidor?
No. La reparación se ejecuta en tu navegador.