Arreglar comillas simples en JSON

Las cadenas y claves de objeto de JSON deben usar comillas dobles. Los valores entre comillas simples son comunes en fragmentos de JavaScript, salidas tipo Python y respuestas de LLM.

Por qué fallan las comillas simples

El JSON estricto solo acepta cadenas con comillas dobles. Un parser rechazará {'name':'Ada'} aunque a los desarrolladores JavaScript la forma les resulte familiar.

Ejemplo erróneo

{ 'name': 'Ada', 'active': true }

JSON corregido

{ "name": "Ada", "active": true }

De dónde sale el texto con comillas simples

repr() y la impresión de diccionarios en Python, literales de objeto JavaScript copiados de la consola, hash inspect en Ruby y muchas respuestas de LLM usan comillas simples. Ninguna de esas cosas es JSON — son literales nativos del lenguaje que solo se parecen.

Por qué un buscar y reemplazar a ciegas es peligroso

Un replace ciego de ' por " rompe valores que contienen un apóstrofo, como { 'note': 'it\'s fine' }. Tras el reemplazo, el apóstrofo interno choca con el nuevo delimitador de cadena. Un convertidor seguro debe rastrear el contexto de las comillas y solo cambiar los delimitadores, no los caracteres internos.

Estrategia segura de conversión

Primero tokeniza la entrada: recorre el texto, identifica los límites de las cadenas por su comilla de apertura y reconstruye cada token con comillas dobles — escapando las comillas dobles internas y deshaciendo el escape de las comillas simples ya redundantes. La herramienta de reparación de este sitio lo hace en una pasada.

Errores de sintaxis JSON relacionados

El JSON con comillas simples suele venir acompañado de otros pecados al estilo JavaScript en el mismo payload: claves sin entrecomillar, comas finales, comentarios de línea o valores undefined. Tras arreglar las comillas, valida el resultado para sacar a la luz lo que quede.

FAQ

P: ¿JSON5 acepta cadenas con comillas simples? R: Sí, JSON5 las permite. P: ¿json.loads de Python aceptará comillas simples? R: No — usa ast.literal_eval si la fuente es realmente un literal de Python; si no, primero convierte las comillas. P: ¿Las claves JSON también deben llevar comillas dobles? R: Sí — las claves son cadenas, misma regla.