HOWTO · JavaScript
Convertir JSON en objeto en JavaScript
Este tutorial demuestra cómo convertir de forma segura una cadena JSON en un objeto.
En esta página
Usa JSON.parse() para convertir una cadena con formato JSON en un valor de JavaScript. Si el documento JSON representa un objeto, el resultado es un objeto de JavaScript cuyas propiedades puedes consultar y utilizar. El análisis no valida las reglas de tu aplicación, no convierte las cadenas de fecha en objetos Date ni hace que los valores no confiables sean seguros para incluir en HTML. Los ejemplos muestran la conversión básica, el manejo de entradas malformadas, el acceso a propiedades anidadas y la conversión de fechas.
Qué devuelve el análisis de JSON
JSON es un formato de texto para representar valores como objetos, matrices, cadenas, números, booleanos y null. Una cadena JSON es texto; después de analizarla, JavaScript devuelve el valor correspondiente. Un documento que representa un objeto produce un objeto, mientras que una matriz JSON produce una matriz. El resultado del análisis no siempre es un objeto, así que el código debe tener en cuenta la estructura que se espera de la entrada.
La sintaxis JSON es más estricta que la de los literales de objeto de JavaScript. Las claves de los objetos y los valores de tipo cadena deben llevar comillas dobles; JSON no admite comentarios, funciones ni comas finales. Por ejemplo, {"name":"Ari","active":true} es texto JSON, pero {name: 'Ari', active: true} no lo es. Por estas reglas de sintaxis, no siempre se puede pasar directamente al analizador un literal de objeto de JavaScript.
Convertir una cadena JSON con JSON.parse()
Pasa la cadena a JSON.parse() y luego usa el valor devuelto como cualquier otro dato de JavaScript. Este ejemplo analiza los datos de una persona y lee dos de sus propiedades:
Ejecuta este ejemplo; el código y las etiquetas visibles permanecen en inglés:
const jsonText = '{"name":"Ari","age":30}';
const person = JSON.parse(jsonText);
console.log(person.name);
console.log(person.age);
El primer registro muestra el nombre y el segundo, la edad como número. El acceso a las propiedades funciona porque el documento JSON representa un objeto. Si la entrada ya es un objeto de JavaScript, no lo conviertas a texto solo para volver a analizarlo: JSON.parse() espera texto JSON.
Manejar JSON no válido
Si la cadena está malformada o no cumple la sintaxis JSON, JSON.parse() lanza un SyntaxError. Captura ese error cuando la entrada pueda proceder de un archivo, una solicitud u otra fuente que quizá no respete el formato esperado. Mantén el manejo del error cerca de la operación de análisis para que quien llama pueda decidir qué hacer después:
El código y las etiquetas visibles del ejemplo permanecen en inglés:
const jsonText = '{"name":"Ari",}';
let person;
try {
person = JSON.parse(jsonText);
console.log(person.name);
} catch (error) {
console.log("Could not parse JSON");
}
Este ejemplo muestra un mensaje breve de la aplicación cuando encuentra una coma final no válida. En código de producción, puedes registrar el error mediante el sistema de registros de tu aplicación o mostrar un mensaje de validación útil. Evita registrar datos sensibles o revelar detalles internos del error a los usuarios. Un análisis correcto solo confirma que el texto cumple la sintaxis JSON; comprueba por separado las propiedades obligatorias y los tipos de sus valores antes de confiar en ellos.
Leer valores anidados
Los objetos y las matrices anidados se analizan como valores de JavaScript anidados, por lo que puedes acceder a ellos con la notación habitual de propiedades e índices. El siguiente ejemplo lee una ciudad de un objeto de dirección y el primer elemento de una matriz:
El código y las etiquetas visibles del ejemplo permanecen en inglés:
const jsonText = '{"person":{"name":"Ari","address":{"city":"Oslo"}},"scores":[8,9]}';
const data = JSON.parse(jsonText);
console.log(data.person.address.city);
console.log(data.scores[0]);
La estructura esperada importa: si falta person, address o scores, o si alguno tiene un tipo distinto, el acceso directo a sus propiedades quizá no proporcione el valor que espera tu aplicación. Si los datos tienen un esquema, valida el valor analizado antes de acceder a propiedades profundas. El análisis tampoco combina objetos ni convierte nombres de propiedades; reconstruye los valores representados en el texto JSON.
Convertir cadenas de fecha después del análisis
JSON no tiene un tipo de fecha, así que las fechas se representan como cadenas. El análisis deja esas cadenas sin cambios. Después de analizar los datos, convierte explícitamente con new Date() la propiedad que sabes que contiene una fecha. Si el valor representa un instante concreto, usa un valor con formato ISO estándar e indicador de zona horaria:
El código y las etiquetas visibles del ejemplo permanecen en inglés:
const jsonText = '{"createdAt":"2024-01-15T12:30:00Z"}';
const data = JSON.parse(jsonText);
const createdAt = new Date(data.createdAt);
console.log(createdAt instanceof Date);
new Date() crea un objeto JavaScript Date a partir de la cadena; Date() sin new devuelve una cadena. El análisis de fechas puede depender del formato de entrada, así que normalízalas en el límite de entrada de los datos y comprueba que la fecha resultante sea válida si la fuente no es confiable. Convierte solo los campos que tu aplicación trata como fechas; el analizador JSON no los identifica automáticamente.