Manual JSON

Logo

Manual sobre el formato de intercambio de datos JSON.

Ver el proyecto en GitHub luisdavidfer/manual-json

JavaScript Object Notation

JSON es un formato ligero de intercambio de datos basado en texto plano definido por Douglas Crockford en 2002.

Introducción

El intercambio de datos en la informática es la transmisión estructurada de información entre sistemas o aplicaciones totalmente independientes. Para que esta transmisión sea posible y la información comprensible para todo tipo de sistemas o aplicaciones debemos estructurar la información a transmitir siguiendo unos estándares comunes para todos, estos son los formatos de intercambio de datos. Algunos de los formatos de intercambio de datos más populares son XML, CSV o el propio JSON.

Hasta finales de la década de los 90, XML o lenguaje de marcas extensible era el estandar de transmisión de datos por excelencia pese a los problemas que presenta cuando trabajábamos con grandes volúmenes de datos debedido al exceso de cantidad de carcacteres añadidos por la sintaxis basada en etiquetas de XML.

Ejemplo de XML

<alumno>
  <nombre>Douglas</nombre>
  <apellido>Crockford</apellido>
  <telefono>123456789</telefono>
  <curso>
    <nivel>Primero</nivel>
    <modalidad>Ciencias de la Computación</modalidad>
  </curso>
</alumno>

Tamaño en disco del ejemplo: 217 bytes

¿Qué es JSON?

JSON son las siglas de JavaScript Object Notation, que no es más que un estandar de transmisión y almacenamiento de datos basado en texto plano, esto significa que la información será almacenada en ficheros de texto plano, en lugar de información binaria, con la extensión .json.

JSON es un estandar ligero que se caracteriza por el reducido tamaño de los archivos lo que mejora la velocidad de transmisión frente a otros estándares como XML, es por ello que desde su aparición su popularidad y uso mantiene un constante crecimiento.

Un archivo JSON contiene una cadena de texto, que sigue una estructura y una sintaxis, que es capaz de ser interpretado por un analizador sintáctico o parser* e incorporar la información contenida al lenguaje de programación deseado. A este proceso se le denomina parsing, mientras que el proceso contrario, que consiste en almacenar un objeto o una estructura de datos en una cadena de texto para ser transmitida o almacenada, se conoce como stringification.

JSON es un estandar independiente del lenguaje de programación por lo que es compatible con la mayoría de lenguajes de programación, bien de forma nativa como es el caso de JavaScript o PHP (desde la versión 5.2) o bien mediante librerías de terceros como pueden ser JSON-java para Java o JsonBox para C++.

*Un analizador sintáctico, parser en inglés, es un programa informático que analiza una cadena de símbolos de acuerdo a las reglas de una gramática formal definida.

Ejemplo de JSON

{
  "nombre" : "Douglas",
  "apellido" : "Crockford",
  "telefono" : 123456789,
  "curso" : {
    "nivel" : "Primero",
    "modalidad" : "Ciencias de la Computación"
  }
}

Tamaño en disco del ejemplo: 163 bytes

JSON y XML

Ambos estándares son utilizados en la informática tanto para almacenar información como para transferirla a través de la red. Las principales diferencias entre ambos son las siguientes:

JSON XML
Tipado predefinido No es tipado
Tipos de datos textos y números Cualquier tipo de dato
Visualización no disponible Permite visualización al ser un lenguaje de marcas
Serialización automatizada mediante objetos Serialización manual mediante código
Soporte exclusivo UTF-8 Soporta diversas codificaciones
No soporta comentarios Con soporte para comentarios
Fácil acceso de lectura y escritura Proceso de escritura y lectura más costoso
No soporta espacio de nombres Soporta espacios de nombres

Las principales ventajas de JSON frente a XML para la transmisión de datos son:

Sin embargo, JSON también tiene carencias, como pueden ser:

Como conclusión podemos decir que ninguno es mejor que el otro, mientras que JSON es más ligero y eficiente, XML es más potente y flexible al ser un lenguaje de marcado extensible cuya estructura podemos definir, por lo que la elección de usar una tecnología u otra se basará en nuestras necesidades.

Objetos en JavaScript

JSON recibe su nombre debido a que se basa en un subconjunto de la notación literal de objetos de JavaScript, pese a ser completamente independiente de este, por lo que no podemos definir la sintaxis de JSON sin hablar antes de los propios objetos de JavaScript, ya que en la definición de estos se basa la sintaxis de JSON.

Pero, ¿qué es un objeto? Un objeto es una unidad o estructura dentro de un programa que tiene un estado y un comportamiento. Es decir, tiene una serie de datos almacenados y tareas que este es capaz de realizar.

Hay varias formas de definir objetos en JavaScript: mediante el uso de inicializadores de objeto, mediante una función constructora o usando el método Object.create.

La inicialización de un objeto, también denominado como la notación literal de este, es la forma que JavaScript nos ofrece para crear un nuevo objeto mediante la siguiente sintaxis:

Ejemplo de notación literal de objetos en JavaScript

var objeto = {
    propiedad1 : valor1,
    propiedad2 : valor2,
    // ...
} 

Esta es la sintaxis en la que se basa JSON, en la definición de un objeto como un conjunto de pares clave-valor donde clave ha de ser una cadena de caracteres limitada por doble comilla y valor cualquiera de los tipos disponibles en JSON, que se especificarán más adelante, todo esto limitado por llaves.

Sintaxis de JSON

La sintaxis de JSON está definida por los tipos de datos que soporta. Estos son cadena de texto, números, objetos, arrays, valores booleanos y null.

Values

Una cadena de texto en JSON se forma de manera análoga a como se haría en muchos lenguajes de programación determinando la cadena de caracteres mediante comillas dobles. Ciertos caracteres especiales o de control se escapan utilizando la barra diagonal invertida.

Strings

Los números pueden ser enteros, en coma flotante, positivos sin signo, negativos e incluso se contempla la notación científica con signo positivo y negativo.

Numbers

Los objetos JSON están formados por parejas clave-valor, siendo la clave una cadena de texto limitada por dobles comillas y valor cualquiera de los tipos de datos del estandar.

Objects

Un array en JSON se forma por valores delimitados entre corcheches y separados entre ellos por comas.

Arrays

Lenguajes soportados

Referencias

Introducción a JSON. Documentación oficial.

JavaScript JSON. W3School.

Trabajando con JSON. MDN Web Docs.

Objeto JSON. MDN Web Docs.

Licencia

Este manual ha sido desarrollado bajo la licencia Creative Commons Zero v1.0 Universal al igual que el tema utilizado de orderedlist por Luis David Fernández Marín.