JSON (JavaScript Object Notation): JSON: un lenguaje sencillo para intercambio de información

JSON (JavaScript Object Notation) es un formato basado en texto puro legible por personas orientado a la comunicación entre personas y ordenadores o entre ordenadores.

La norma define un conjunto de reglas estructurales para representar datos estructurados.

JSON se emplea en lugar del Extensible Markup Language (XML), del que (JSON) se diferencia en que se limita a representar datos estructurados, sin llegar a contituir un lenguaje de marcado completo.

El tipo MIME de texto en JSON es application/json

Sintaxis de JSON

JSON consta de tipos atómicos (texto, números--tanto enteros como fraccionarios--, boolenos y null), así como arrays (listas) y objetos.

Un objeto de JSON consta de pares de nombre y valor. El nombre es texto (secuencia de caracteres) entre comillas y el valor es o atómico o compuesto (un array o un objeto a su vez). Los pares se separan mediante comas y se encierran entre llaves.

Nombre y valor de un campo se separan mediante dos puntos.

Un ejemplo:

{
  "nombre": "Pedro",
  "apellidos": ["Mora", "Gutiérrez"],
  "nacido": 1988,
  "cónyuge": null
}

Los signos de puntuación empleados en JSON son:

Objetos en JSON

Un objeto de JSON es un conjunto no ordenado de múltiples pares de nombre y valor. Se escriben entre llaves: { }. Los nombres van seguidos de dos puntos y su valor, con espacios entre medias opcionales. Cada par de un objeto se separa del siguiente mediante coma.

Arrays de JSON

Los arrays se encierran entre corchetes ([]) y se separan mediante comas. Un array puede contener, entre otros elementos, un array o un subobjeto. Un array que sólo contenga arrays se consideraría un array multidimensional.

Un objeto puede a su vez contener objetos y arrays: el valor de un par nombre-valor de un objeto puede ser un array o un objeto.

Por ejemplo, un campo animales podría consisistir en un array de objetos que representasen animales:

"animales": [
  {"tipo":"caballo", "patas": 4},
  {"tipo":"araña", "patas": 8}
 ]

Caracteres escapados (especiales) en JSON

Uno escapa un carácter precediéndolo de barra invertida (\).

Los caracteres que pueden o deben escaparse son: ". \, /, b, f, n, r, y t

Esto genera las siguientes secuencias JSON:

Línea nueva en JSON

Basta con teclear la secuencia: \\n dentro de una cadena de caracteres.


\n no es más que la concatenación de dos caracteres.

JSON comparado con JavaScript

En JavaScript, un objeto también puede hacer corresponder un nombre con:

Además, en JSON el texto sólo puede escribirse entre comillas, mientras que en JavaScript también entre apóstrofos y acentos graves.

{"name":"John"}

JSON frente a XML

JSON se procesa y transmite más rápido XML porque se diseñó específicamente para el intercambio de datos. Es conciso y por tanto requiere menos bytes para su almacenamiento y transmisión. Sus analizadores son más sencillos, por tanto tarda menos en procesarse y ocupa menos memoria. XML es lento y pesado porque se diseñó para muchos más usos que el intercambio de datos.

JSON es más fácil de manejar en varios lenguajes de programación (JavaScript, Python, PHP). También es más fácil de leer que XML.

El hecho de que el formato JSON sea idéntico a la sintaxis de los objetos de JavaScript permite que un programa en JavaScript convierta JSON en objetos de JavaScript (mediante JSON.parse()) y viceversa (mediante JSON.stringify()).

Validación de esquemas JSON*

Herramientas JSON disponibles en linux

Desde la más sencilla a la más potente:

jq
procesador de JSON en modo texto
jmespath
cuya orden jp es la interfaz de JMESPath, un lenguaje de expresiones para la manipulación de JSON (igual que XPath lo es de XML).
taoJSON

Una biblioteca de C++ sin dependencias ni ejecutables que viene con una clase Value (valor) todouso, emplea Type Traits para interactuar con los tipos de C++, con una Interfaz de Eventos para convertir entre JSON, JAXN, CBOR, MsgPack y UBJSON. Y mucho más.

Los archivos correspondientes se instalan en los siguientes directorios:

  • Cabeceras (*.hpp) en el directorio: /usr/include/tao/json/ y sus subdirectorios
  • Ejemplos (*.cpp) en el directorio: /usr/share/doc/tao-json-examples
CouchDB
Una base de datos de documentos JSON.
MongoDB
Otra base de datos de documentos JSON.
Virtuoso
...

Convertir JSON a otros formatos

Uno almacena colecciones (terminología de MongoDB) de objetos JSON en arrays (de objetos).

No parece que jq sirva para convertir JSON a otros formatos (salvo unos pocos predefinidos), si bien funciona bien para comprobar la sintaxis (validación).

Tras mucho reflexionar y navegar he llegado a la conclusión de que me conviene usar JavaScript porque de fábrica reconoce el formato. No en vano JSON son las siglas de JavaScript Object Notation!

Tal vez, después de desarrollar y depurar código en JavaScript para una página web, lo trasladaría a un programa de node.js...