JSON, JavaScript Object Notation, es un formato de texto para representar datos estructurados: objetos, listas, cadenas, numeros, booleanos y un valor nulo, escritos en una sintaxis lo suficientemente pequena para leerse en una tarde y lo suficientemente estricta para que todos los lenguajes la parseen de la misma manera. No esta atado a JavaScript a pesar del nombre. Todos los lenguajes principales incluyen un parser de JSON en su biblioteca estandar o con una linea de instalacion, que es la razon real por la que gano: no porque sea elegante, sino porque es aburrido y portable.
Como se ve
{
"nombre": "Ada Lovelace",
"edad": 36,
"estaEmpleada": true,
"habilidades": ["matematicas", "escritura"],
"direccion": { "ciudad": "Londres", "pais": "UK" },
"apodo": null
}
Un objeto es { } que contiene pares clave-valor, un array es [ ] que
contiene una lista ordenada, y todo lo demas se anida dentro de esos dos
contenedores. Esa es toda la forma de JSON: dos tipos de contenedor y un
puñado de tipos de valor dentro de ellos.
Los seis tipos de valor, ni mas ni menos
Un valor JSON es una cadena, un numero, un booleano (true o false),
null, un array o un objeto. Nada mas existe en la especificacion. No hay
tipo fecha, no hay undefined, no hay sintaxis de comentarios, y no hay forma
de representar una funcion. Una fecha se convierte en una cadena en un formato
que ambas partes acuerdan (generalmente ISO 8601), y un valor que seria
undefined en JavaScript simplemente se omite del objeto en vez de escribirse.
Tipos de Datos JSON Explicados cubre cada uno de los
seis en mas detalle, incluyendo los casos borde que hacen fallar a un parser
ingenuo.
Por que reemplazo a XML en la mayoria de las APIs
XML envuelve cada valor en etiquetas de apertura y cierre, soporta atributos encima de eso, y necesita un lenguaje de schema separado para describir que es valido. Los contenedores de JSON son de dos caracteres cada uno, los valores estan tipificados sin una etiqueta que te lo diga, y la forma del documento refleja la forma de la estructura de datos que un programa usa realmente; parsear un documento JSON al literal de objeto nativo de un lenguaje es casi una copia directa, donde un documento XML usualmente necesita su propio modelo de objetos traducido encima. Esa es una diferencia genuina y medible en tamano de payload y costo de parsing, que es por lo que las APIs REST se establecieron en JSON una vez que existio. Ver JSON vs XML para una comparacion mas cercana y especifica.
Donde lo encontraras realmente
- Respuestas y peticiones de APIs REST. El formato dominante para cuerpos
Content-Type: application/json, en ambas direcciones. - Archivos de configuracion.
package.json,tsconfig.json, y la mayoria de configuraciones de herramientas modernas, aunque YAML tambien es comun aqui; ver JSON vs YAML para cuando cada uno es mejor. - Bases de datos NoSQL y de documentos. Los documentos de MongoDB se almacenan como BSON, un superconjunto binario de JSON, y la mayoria de bases de datos de documentos aceptan y devuelven JSON directamente.
- Lineas de log y tuberias de datos, un objeto JSON por linea, un formato usualmente llamado NDJSON. Casos de Uso Comunes de JSON recorre esto y los otros con formas reales.
- Almacenamiento del navegador.
localStoragesolo almacena cadenas, asi que cualquier cosa estructurada se pasa porJSON.stringifyal entrar y porJSON.parseal salir.
Trabajando con el
Pega un documento en el Formateador JSON para imprimirlo con formato, o en el Validador JSON para verificarlo contra la especificacion con una linea y columna en el caracter exacto que fallo. Ninguno sube lo que pegas; ambos se ejecutan completamente en tu navegador. Una vez que lo basico tenga sentido, la Hoja de Trucos JSON es una referencia de una pagina para las reglas de sintaxis anteriores, vale la pena tenerla abierta en una pestaña o descargarla para referencia sin conexion.