JSON
JSON (acrónimo de JavaScript Object Notation,
'notación de objeto de JavaScript') es un formato de JSON
texto sencillo para el intercambio de datos. Se trata
de un subconjunto de la notación literal de objetos de
JavaScript, aunque, debido a su amplia adopción
como alternativa a XML, se considera un formato
independiente del lenguaje.
Una de las supuestas ventajas de JSON sobre XML
como formato de intercambio de datos es que resulta
mucho más sencillo escribir un analizador sintáctico
(parser) para él.1 En JavaScript, un texto JSON se
puede analizar fácilmente usando la función
eval(), algo que (debido a la ubicuidad de
JavaScript en casi cualquier navegador web) ha sido
fundamental para que haya sido aceptado por parte https://json.org/, https://json.org/json-fr.html y
de la comunidad de desarrolladores AJAX.2 3 4 https://json.org/json-it.html
Información general
En la práctica, los argumentos a favor de la facilidad Extensión de .json
de desarrollo de analizadores o de sus rendimientos archivo
son poco relevantes, debido a las cuestiones de
Tipo de MIME application/json
seguridad que plantea el uso de eval() y el auge
Tipo de Lenguaje de marcado
del procesamiento nativo de XML incorporado en
formato
los navegadores modernos.5 Por esa razón, JSON
Extendido de JavaScript
se emplea habitualmente en entornos donde el
Estándar(es) STD 90 (https://tools.ietf.org/htm
tamaño del flujo de datos entre cliente y servidor es
de vital importancia. De aquí su uso por Yahoo!, l/std90) (RFC 8259)
Google, Mozilla, etc, que atienden a millones de ECMA-404 (https://ecma-internati
usuarios, cuando la fuente de datos es explícitamente onal.org/wp-content/uploads/EC
de fiar y donde no es importante el hecho de no MA-404_2nd_edition_december_
disponer de procesamiento XSLT para manipular los 2017.pdf)
datos en el cliente. ISO/IEC 21778:2017 (https://ww
w.iso.org/standard/71616.html)
Si bien se tiende a considerar JSON como una
Formato
alternativa a XML, lo cierto es que no es infrecuente
abierto
el uso de JSON y XML en la misma aplicación; así,
una aplicación de cliente que integra datos de
Google Maps con datos meteorológicos en SOAP (Simple Object Access Protocol) necesita hacer uso de ambos
formatos.
En diciembre de 2005, Yahoo! comenzó a dar soporte opcional de
JSON en algunos de sus servicios web.6
Nombre y pronunciación
En inglés, JSON se pronuncia de forma acronímica, como el
nombre de la letra J (jay, /yéi/) seguido de la sílaba «son». El
resultado habitual, con la primera sílaba tónica (/yéison/), se
pronuncia igual que el nombre Jason, aunque Douglas Crockford,
desarrollador del formato JSON (https://jsonformatter.ai), marca
como tónica la segunda sílaba, como /yeisón/.7
En español, hay que tener en cuenta que JSON es una sigla y que
en ocasiones no hay una sola forma de pronunciarlas. Atendiendo a
la norma ortográfica,8 lo normal sería pronunciarla como /jotasón/.
Crockford fue el primero en
Algunos lo pronuncian como /jasón/, pero se alejaría más de la
especificar y popularizar el JSON
pronunciación de la sigla introduciendo una letra más que no existe
en la sigla (JASON) y por tanto sería una pronunciación incorrecta.
Algunos que no son lingüistas prefieren pronunciar la sigla en español de la manera inglesa,9 que tal vez
sería más cercano al spanglish estadounidense.
Sintaxis
Los tipos de datos disponibles con JSON son:
Números: Se permiten números negativos y opcionalmente pueden contener parte
fraccional separada por puntos. Ejemplo: 123.456
Cadenas: Representan secuencias de cero o más caracteres. Se ponen entre doble comilla
y se permiten cadenas de escape. Ejemplo: "Hola"
Booleanos: Representan valores booleanos y pueden tener dos valores: true y false
null: Representan el valor nulo.
Array: Representa una lista ordenada de cero o más valores los cuales pueden ser de
cualquier tipo. Los valores se separan por comas y el vector se mete entre corchetes.
Ejemplo ["juan","pedro","jacinto"]
Objetos: Son colecciones no ordenadas de pares de la forma <nombre>:<valor> separados
por comas y puestas entre llaves. El nombre tiene que ser una cadena entre comillas
dobles. El valor puede ser de cualquier tipo. Ejemplo:
{
"departamento":8,
"nombredepto":"Ventas",
"director": "Juan Rodríguez",
"empleados":[
{
"nombre":"Pedro",
"apellido":"Fernández"
},{
"nombre":"Jacinto",
"apellido":"Benavente"
}
]
}
Modelos de procesamiento
Al ser JSON un formato muy extendido para el intercambio de datos, se han desarrollado API para distintos
lenguajes (por ejemplo ActionScript, C, C++, C#, ColdFusion, Common Lisp, Delphi, E, Eiffel, Java,
JavaScript, ML, Objective-C, Objective CAML, Perl, PHP, Python, Rebol, Ruby, Lua y Visual FoxPro)
que permiten analizar sintácticamente, generar, transformar y procesar este tipo de dato.
Los modelos de programación más utilizados para tratar con JSON en los distintos lenguajes son:10
Modelo de objeto: El JSON completo es almacenado en memoria en un formato de árbol.
Este árbol es navegado, analizado y modificado con las API apropiadas. Como lo carga
todo en memoria y luego lo procesa este modelo consume muchos recursos. Sin embargo,
es muy flexible para manipular el contenido. Este modelo es permitido por ejemplo en Java
por la JSR 353 y por la biblioteca Jackson.
Modelo de flujo: Los datos son leídos o escritos en bloques. Por ejemplo, cada vez que se
lee un bloque, el analizador genera eventos apropiados para indicar el tipo de bloque de
que se trata. El cliente puede procesar el contenido escuchando los eventos apropiados.
Además, es el cliente el que decide como se va leyendo el JSON permitiendo parar o saltar
contenidos en mitad del proceso. El proceso de escritura tiene propiedades análogas. Por
ejemplo, este modelo es permitido en java por la JSR 353.
Convirtiendo los objetos JSON en objetos del lenguaje. En Java esto es realizado por
ejemplo por las bibliotecas Jackson y Gson.
Uso de JSON
En teoría, es trivial analizar JSON en JavaScript usando la función JSON.parse() incorporada en el
lenguaje. Por ejemplo:
miObjeto = JSON.parse(json_datos);
En la práctica, las consideraciones de seguridad por lo general recomiendan no usar eval sobre datos crudos
y debería usarse un analizador JavaScript distinto para garantizar la seguridad. El analizador proporcionado
por JSON.org usa eval() en su función de análisis, protegiéndola con una expresión regular de forma
que la función sólo ve expresiones seguras.
Un ejemplo de acceso a datos JSON usando XMLHttpRequest es:
var http_request = new XMLHttpRequest();
var url = "http://example.net/jsondata.php"; // Esta URL debería devolver datos JSON
// Descarga los datos JSON del servidor.
http_request.onreadystatechange = handle_json;
http_request.open("GET", url, true);
http_request.send(null);
function handle_json() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var json_data = http_request.responseText;
var the_object = eval("(" + json_data + ")");
} else {
alert("Ocurrió un problema con la URL.");
}
http_request = null;
}
}
Obsérvese que el uso de XMLHttpRequest en este ejemplo no es compatible con todos los navegadores, ya
que existen variaciones sintácticas para Internet Explorer, Opera, Safari, y navegadores basados en
Mozilla.11
También es posible usar elementos <iframe> ocultos para solicitar los datos de manera asíncrona, o usar
peticiones <form target="url_to_cgi_script" />. Estos métodos eran los más habituales
antes del advenimiento del uso generalizado de XMLHttpRequest.12
Hay una biblioteca13 para el framework .NET que exporta clases .NET con la sintaxis de JSON para la
comunicación entre cliente y servidor, en ambos sentidos.
Ejemplo de JSON
A continuación, se muestra un ejemplo simple de definición de barra de menús usando JSON y XML.
JSON:
{
"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitems": [
{
"value": "New", "onclick": "CreateNewDoc()"
},{
"value": "Open", "onclick": "OpenDoc()"
},{
"value": "Close", "onclick": "CloseDoc()"
}
]
}
}
}
Es una posible representación JSON del siguiente XML:14
<menu id="file" value="File">
<popup>
<menuitem value="New" onclick="CreateNewDoc()" />
<menuitem value="Open" onclick="OpenDoc()" />
<menuitem value="Close" onclick="CloseDoc()" />
</popup>
</menu>
Comparación con XML y otros lenguajes de marcado
Hay muchos analizadores JSON en el lado del servidor, existiendo al menos un analizador para la mayoría
de los entornos. En algunos lenguajes, como Java o PHP, hay diferentes implementaciones donde escoger.
En JavaScript, el análisis es posible de manera nativa con la función JSON.parse(). Ambos formatos
carecen de un mecanismo para representar grandes objetos binarios.
Con independencia de la comparación con XML, JSON puede ser muy compacto y eficiente si se usa de
manera efectiva. Por ejemplo, la aplicación DHTML de búsqueda en «BarracudaDrive» (https://web.archiv
e.org/web/20060521212003/http://barracudaserver.com/examples/BarracudaDrive/CommandLine.html#AP
I) (en inglés). Archivado desde el original (http://barracudaserver.com/examples/BarracudaDrive/Command
Line.html#API) el 21 de mayo de 2006. recibe los listados de directorio como JSON desde el servidor. Esta
aplicación de búsqueda está permanentemente consultando al servidor por nuevos directorios, y es
notablemente rápida, incluso sobre una conexión lenta.
Los entornos en el servidor normalmente requieren que se incorpore una función u objeto analizador de
JSON. Algunos programadores, especialmente los familiarizados con el lenguaje C, encuentran JSON más
natural que XML, pero otros desarrolladores encuentran su escueta notación algo confusa, especialmente
cuando se trata de datos fuertemente jerarquizados o anidados muy profundamente.
Hay más comparaciones entre JSON y XML en JSON.org15
YAML es un superconjunto de JSON que trata de superar algunas de las limitaciones de este. Aunque es
significativamente más complejo,16 todavía puede considerarse como ligero. El lenguaje de programación
Ruby utiliza YAML como el formato de serialización por defecto. Así pues, es posible manejar JSON con
bastante sencillez.
Véase también
Freebase
Lenguaje jq para procesamiento de JSON
Referencias
1. «JSON Parser: View and Edit JSON» (https://jsonformatter.org/json-parser). jsonformatter.org
(en inglés).
2. «AJAX without XML» [Comparación entre XML, JSON y objetos Javascript] (https://web.archi
ve.org/web/20070507120301/http://www.softwaresecretweapons.com/jspwiki/Wiki.jsp?page
=AJAXWithoutXML). Software secret weapons (en inglés). Archivado desde el original (htt
p://www.softwaresecretweapons.com/jspwiki/Wiki.jsp?page=AJAXWithoutXML) el 7 de
mayo de 2007.
3. «Speeding Up AJAX with JSON» [Muestra lo sencillo que es referenciar JSON en lugar de
XML] (http://www.developer.com/lang/jscript/article.php/3596836). Developer (en inglés).
4. «Comunicación AJAX - PHP con JSON» (https://web.archive.org/web/20080827160444/htt
p://webelop.com.ar/ajax/comunicacion-ajax-php-con-json/). webelop. Argentina. Archivado
desde el original (http://webelop.com.ar/ajax/comunicacion-ajax-php-con-json/) el 27 de
agosto de 2008. «Muestra cómo obtener información en AJAX consultando un archivo PHP.
Tiene en cuenta el problema de los caracteres especiales ».
5. «JSON: The Fat-Free Alternative to XML» (http://www.json.org/xml.html). json.org (en inglés).
6. Yahoo!. «Using JSON with Yahoo! Web services» (https://web.archive.org/web/2010010601
0113/http://developer.yahoo.com/common/json.html). Archivado desde el original (http://devel
oper.yahoo.com/common/json.html) el 6 de enero de 2010. Consultado el 2 de marzo de
2010.
7. «Doug Crockford "Google Tech Talks: JavaScript: The Good Parts" » (https://www.youtube.co
m/watch?v=hQVTIJBZook&t=2405). 7 de febrero de 2009.
8. RAE. «sigla | Diccionario panhispánico de dudas» (https://www.rae.es/dpd/sigla).
«Diccionario panhispánico de dudas». Consultado el 25 de junio de 2021.
9. Kapić, Edin (15 de abril de 2016). «“Jotasón” y la (mala) pronunciación de términos
informáticos» (https://www.edinkapic.com/2016/04/jotason-y-la-mala-pronunciacion-de-termi
nos-informaticos.html). EdinKapic.com. Consultado el 2 de septiembre de 2018.
10. RESTful Java Web Services. Jobinesh Purushothaman. Packt Publishing 2015. Segunda
edición
11. «.json Extensión de archivo: Para qué son los archivos JSON?» (https://abrirarchivos.info/ext
ension/json). abrirarchivos. Consultado el 22 de octubre de 2021.
12. «Animaciones para web con JSON» (https://ramonubric.com/archivos-json-animaciones-we
b/). ramonubric. «Muestra como exportar animaciones con After Effects en formato JSON ».
13. http://ajax.schwarz-interactive.de Archivado (https://web.archive.org/web/20110307074223/ht
tp://ajax.schwarz-interactive.de/) el 7 de marzo de 2011 en Wayback Machine.
14. «Presentación útil de JSON» (https://web.archive.org/web/20101119084541/http://emmerson
miranda.blogspot.com/2010/11/manual-de-json.html). Emmerson Miranda. Archivado desde
el original (http://emmersonmiranda.blogspot.com/2010/11/manual-de-json.html) el 19 de
noviembre de 2010.
15. «Página de ejemplo» (http://www.JSON.org/example.html). JSON.org (en inglés).
16. Ippolito, Bob (19 de julio de 2005). «What happened to YAML?» [¿Qué pasó con YAML?] (htt
ps://web.archive.org/web/20120214050054/http://bob.pythonmac.org/archives/2005/07/19/w
hat-happened-to-yaml/) (en inglés). Archivado desde el original (http://bob.pythonmac.org/arc
hives/2005/07/19/what-happened-to-yaml/) el 14 de febrero de 2012. Consultado el 22 de
noviembre de 2012.
Obtenido de «https://es.wikipedia.org/w/index.php?title=JSON&oldid=158611851»