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:
- comillas
- llaves para encerrar objetos (
{objeto}) - corchetes para encerrar arrays/listas (
[lista]) - comas para separar elementos de una lista
- dos puntos para separar el nombre de un campo de su valor
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:
\"\\\/: (opcional pero frecuente)\b: retroceso\f\n: nueva línea\r: retorno de carro\t: tabulación\uXXXX: secuencia de unicode
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:
- una función (método)
- una fecha (de la clase
Date) - un objeto de cualquier otra de las clases fundamentales, tales como
Set,RegExp - un objeto de una clase que uno haya definido o copiado
undefined
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
jpes la interfaz deJMESPath, 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...