Convertidor JSON a objeto JavaScript

JSON estricto se puede convertir en un objeto JavaScript con JSON.parse. Los literales de objeto JavaScript necesitan limpieza antes de ser JSON válido.

Convertir JSON en JavaScript

Si la entrada ya es JSON válido, el convertidor más seguro es JSON.parse(jsonText). Devuelve un objeto, array, cadena, número, booleano o null de JavaScript sin ejecutar código.

Entrada JSON

{ "name": "Ada", "active": true, "skills": ["math", "notes"] }

Uso en JavaScript

const user = JSON.parse(jsonText); console.log(user.name);

La entrada de literal de objeto es diferente

Un literal de objeto JavaScript como { name: 'Ada', active: true } no es JSON. Antes de pasarlo por JSON.parse, repara las claves sin comillas, convierte las comillas simples a dobles, elimina los comentarios y quita las comas finales.

Cuándo evitar eval

No uses eval para convertir texto desconocido en un objeto. eval ejecuta código. JSON.parse solo parsea datos, por eso el JSON estricto es más seguro para payloads de API, configuración, logs y ejemplos pegados.

Casos límite: fechas, undefined y funciones

JSON no tiene tipo Date, undefined ni función. Las fechas viajan como cadenas ISO, los undefined se pierden al hacer stringify y las funciones no pueden representarse en absoluto. Si un objeto JavaScript contiene cualquiera de ellos, el JSON resultante será una captura con pérdida — restaura los tipos explícitamente con una función reviver en JSON.parse.

TypeScript y tipos inferidos

JSON.parse devuelve 'any' porque el parser no puede saber la forma de antemano. Para acceso tipado, o declara un tipo de retorno (JSON.parse(text) as User) tras validar con una librería de schema como zod o io-ts, o genera una interfaz a partir de un ejemplo con la herramienta JSON to TypeScript.

Dirección inversa: objeto a JSON

JSON.stringify(value, null, 2) produce JSON formateado a partir de un valor JavaScript. Silenciosamente descarta undefined, funciones y claves Symbol; las referencias circulares lanzan error. Pasa una función replacer como segundo argumento para controlar qué campos sobreviven — útil para limpiar internos antes de enviar un objeto por la red.