Ir al contenido
Menú principal
Menú principal
mover a la barra lateral
ocultar
Navegación
Página principal
Cambios recientes
Página aleatoria
Ayuda sobre MediaWiki
Buscar
Buscar
español
Apariencia
Crear una cuenta
Acceder
Herramientas personales
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Edición de «
JSON
»
Página
Discusión
español
Leer
Editar
Editar código
Ver historial
Herramientas
Herramientas
mover a la barra lateral
ocultar
Acciones
Leer
Editar
Editar código
Ver historial
General
Lo que enlaza aquí
Cambios relacionados
Información de la página
Apariencia
mover a la barra lateral
ocultar
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
{{otros usos|Jasón (desambiguación)|otro=Jason Voorhees}} {{Ficha de formato de archivo | extensión = .json | MIME = application/json | género = [[Lenguaje de marcado]] | contenedor para = 0 | contenido por = 0 | extendido de = [[JavaScript]] | estándar = {{Plainlist| * [https://tools.ietf.org/html/std90 STD 90] (RFC 8259) * [https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf ECMA-404] * [https://www.iso.org/standard/71616.html ISO/IEC 21778:2017] }} |abierto=Sí }} [[Archivo:Douglas Crockford.jpg|miniatura|Crockford fue el primero en especificar y popularizar el JSON]] '''JSON''' (acrónimo de '''JavaScript Object Notation''', 'notación de objeto de JavaScript') es un formato de texto sencillo para el intercambio de datos. Se trata de un subconjunto de la notación literal de [[objeto (programación)|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.<ref>{{cita web| url=https://jsonformatter.org/json-parser| título=JSON Parser: View and Edit JSON| sitio web=jsonformatter.org| idioma=inglés}}</ref> En JavaScript, un texto JSON se puede analizar fácilmente usando la función <code>[[eval]]()</code>, algo que (debido a la ubicuidad de JavaScript en casi cualquier [[navegador web]]) ha sido fundamental para que haya sido aceptado por parte de la comunidad de desarrolladores [[AJAX]].<ref>{{cita web| url=http://www.softwaresecretweapons.com/jspwiki/Wiki.jsp?page=AJAXWithoutXML| título=AJAX without XML|título-trad=Comparación entre XML, JSON y objetos Javascript|sitio web=Software secret weapons| idioma=inglés| urlarchivo=https://web.archive.org/web/20070507120301/http://www.softwaresecretweapons.com/jspwiki/Wiki.jsp?page=AJAXWithoutXML| fechaarchivo=2007-05-07}}</ref><ref>{{cita web| url=http://www.developer.com/lang/jscript/article.php/3596836| título=Speeding Up AJAX with JSON| título-trad=Muestra lo sencillo que es referenciar JSON en lugar de XML| sitio web=Developer| idioma=inglés}}</ref><ref>{{cita web| url=http://webelop.com.ar/ajax/comunicacion-ajax-php-con-json/| título=Comunicación AJAX - PHP con JSON| cita=Muestra cómo obtener información en AJAX consultando un archivo PHP. Tiene en cuenta el problema de los caracteres especiales|sitio web=webelop| ubicación=Argentina| urlarchivo=https://web.archive.org/web/20080827160444/http://webelop.com.ar/ajax/comunicacion-ajax-php-con-json/| fechaarchivo=2008-08-27}}</ref> En la práctica, los argumentos a favor de la facilidad de desarrollo de analizadores o de sus rendimientos son poco relevantes, debido a las cuestiones de seguridad que plantea el uso de <code>eval()</code> y el auge del procesamiento nativo de XML incorporado en los navegadores modernos.<ref>{{cita web| url=http://www.json.org/xml.html| título=JSON: The Fat-Free Alternative to XML| sitio web=json.org|idioma=inglés}}</ref> Por esa razón, JSON se emplea habitualmente en entornos donde el tamaño del flujo de datos entre cliente y servidor es de vital importancia. De aquí su uso por [[Yahoo!]], [[Google]], [[Mozilla (comunidad)|Mozilla]], etc, que atienden a millones de usuarios, cuando la fuente de datos es explícitamente de fiar y donde no es importante el hecho de no disponer de procesamiento [[XSLT]] para manipular los datos en el cliente. Si bien se tiende a considerar JSON como una ''alternativa'' a XML, lo cierto es que no es infrecuente 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 ''[[Simple Object Access Protocol|SOAP]] <SMALL><SMALL>([[Simple Object Access Protocol]])''</SMALL></SMALL> necesita hacer uso de ambos formatos. En diciembre de 2005, Yahoo! comenzó a dar soporte opcional de JSON en algunos de sus [[Servicio web|servicios web]].<ref name="yahoo">{{cita web |url=http://developer.yahoo.com/common/json.html |título=Using JSON with Yahoo! Web services |autor=[[Yahoo!]] |fechaacceso=2 de marzo de 2010 |urlarchivo=https://web.archive.org/web/20100106010113/http://developer.yahoo.com/common/json.html |fechaarchivo=6 de enero de 2010 }}</ref> == Nombre y pronunciación == En [[idioma inglés|inglés]], JSON se pronuncia de forma [[acrónimo|acronímica]], como el nombre de la letra [[J]] (''jay'', {{IPA|/dʒeɪ/}}) seguido de la sílaba «son». El resultado habitual, con la primera sílaba tónica ({{IPA|/ˈdʒeɪsən/}}), se pronuncia igual que el nombre Jason, aunque [[Douglas Crockford]], desarrollador del [https://jsonformatter.ai formato JSON], marca como tónica la segunda sílaba, como {{nowrap|{{IPA|/dʒeɪˈsʌn/}}}}.<ref>{{cite web | title = Doug Crockford "Google Tech Talks: JavaScript: The Good Parts" | date = 7 de febrero de 2009 | url = https://www.youtube.com/watch?v=hQVTIJBZook&t=2405 }}</ref> En [[idioma español|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,<ref>{{Cita web|url=https://www.rae.es/dpd/sigla|título=sigla {{!}} Diccionario panhispánico de dudas|fechaacceso=2021-06-25|apellido=RAE|sitioweb=«Diccionario panhispánico de dudas»|idioma=es}}</ref> lo normal sería pronunciarla como {{nowrap|{{IPA|/xotaˈson/}}}} (jotasón). Algunos lo pronuncian como {{nowrap|{{IPA|/xaˈson/}}}} (jasón), pero se alejaría más de la 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. Otras personas prefieren pronunciar la sigla en español de manera similar al idioma inglés: {{IPA|/ˈʝei̯son/}} (yéison).<ref>{{cita web|url=https://www.edinkapic.com/2016/04/jotason-y-la-mala-pronunciacion-de-terminos-informaticos.html|título=“Jotasón” y la (mala) pronunciación de términos informáticos|fechaacceso=2 de septiembre de 2018|fecha=15 de abril de 2016|obra=EdinKapic.com|apellidos1=Kapić|nombre1=Edin}}</ref> == 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: <code>"Hola"</code> * [[Tipo de dato lógico|Booleanos]]: Representan valores booleanos y pueden tener dos valores: <code>true</code> y <code>false</code> * null: Representan el valor nulo. * [[Vector (informática)|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 <code>["juan","pedro","jacinto"]</code> * 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: <syntaxhighlight lang="json"> { "departamento":8, "nombredepto":"Ventas", "director": "Juan Rodríguez", "empleados":[ { "nombre":"Pedro", "apellido":"Fernández" },{ "nombre":"Jacinto", "apellido":"Benavente" } ] } </syntaxhighlight> Es recomendable validar previamente la estructura de un archivo JSON antes de su análisis para evitar errores. Existen herramientas en línea como [https://json-validate.com JSON Validate] que permiten comprobar la sintaxis de manera eficiente. == Modelos de procesamiento == Dado que el JSON es ampliamente utilizado para el intercambio de datos, se han desarrollado APIs para diversos lenguajes de programación, como [[ActionScript]], [[C (lenguaje de programación)|C]], [[C++]], [[C Sharp|C#]], [[ColdFusion]], [[Common Lisp]], [[Embarcadero Delphi|Delphi]], [[E (lenguaje de programación)|E]], [[Eiffel (lenguaje de programación)|Eiffel]], [[Java (lenguaje de programación)|Java]], [[JavaScript]], [[ML (lenguaje de programación)|ML]], [[Objective-C]], Objective CAML, [[Perl]], [[PHP]], [[Python]], Rebol, [[Ruby]], [[Lua]] y [[Visual FoxPro]]. Los modelos de programación más comunes para manipular JSON en diferentes lenguajes incluyen:<ref>RESTful Java Web Services. Jobinesh Purushothaman. Packt Publishing, 2015. Segunda edición.</ref> * Modelo de objeto: En este enfoque, el JSON completo se almacena en memoria en forma de árbol, lo que permite navegar, analizar y modificar el contenido utilizando las API adecuadas. Aunque este modelo consume más recursos al cargar todo en memoria, es altamente flexible para la manipulación de datos. Ejemplos de implementación incluyen la JSR 353 y la biblioteca Jackson en Java. * Modelo de flujo: Aquí, los datos se leen o escriben en bloques, generando eventos apropiados para indicar el tipo de bloque durante el proceso de lectura. El cliente puede procesar el contenido escuchando estos eventos, lo que le permite controlar cómo se lee el JSON, incluyendo la posibilidad de detener o saltar contenido durante el proceso. Este modelo también está permitido en Java a través de la JSR 353. * Conversión de objetos JSON a objetos del lenguaje: En este caso, las bibliotecas como Jackson y Gson en Java se encargan de convertir los objetos JSON en objetos del lenguaje de programación utilizado. == Uso de JSON == En teoría, es trivial analizar JSON en JavaScript usando la función <code>JSON.parse()</code> incorporada en el lenguaje. Por ejemplo: <syntaxhighlight lang="javascript"> miObjeto = JSON.parse(json_datos); </syntaxhighlight> 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 <code>eval()</code> 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: <syntaxhighlight lang="javascript"> 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; } } </syntaxhighlight> 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 (navegador)|Opera]], [[Safari (navegador)|Safari]], y navegadores basados en [[Mozilla Application Suite|Mozilla]].<ref>{{cita web|título=.json Extensión de archivo: Para qué son los archivos JSON?|url=https://abrirarchivos.info/extension/json|obra=abrirarchivos|fechaacceso=22 de octubre de 2021}}</ref> También es posible usar elementos <code><iframe></code> ocultos para solicitar los datos de manera asíncrona, o usar peticiones <code><form target="url_to_cgi_script" /></code>. Estos métodos eran los más habituales antes del advenimiento del uso generalizado de XMLHttpRequest.<ref>{{cita web| url=https://ramonubric.com/archivos-json-animaciones-web/| título=Animaciones para web con JSON| cita=Muestra como exportar animaciones con After Effects en formato JSON| sitio web=ramonubric}}</ref> Hay una biblioteca<ref>http://ajax.schwarz-interactive.de {{Wayback|url=http://ajax.schwarz-interactive.de/ |date=20110307074223 }}</ref> 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: <syntaxhighlight lang="json"> { "menu": { "id": "file", "value": "File", "popup": { "menuitems": [ { "value": "New", "onclick": "CreateNewDoc()" },{ "value": "Open", "onclick": "OpenDoc()" },{ "value": "Close", "onclick": "CloseDoc()" } ] } } } </syntaxhighlight> Es una posible representación JSON del siguiente XML:<ref>{{cita web| url=http://emmersonmiranda.blogspot.com/2010/11/manual-de-json.html| título=Presentación útil de JSON| sitio web=Emmerson Miranda| urlarchivo=https://web.archive.org/web/20101119084541/http://emmersonmiranda.blogspot.com/2010/11/manual-de-json.html| fechaarchivo=2010-11-19}}</ref> <syntaxhighlight lang="XML"> <menu id="file" value="File"> <popup> <menuitem value="New" onclick="CreateNewDoc()" /> <menuitem value="Open" onclick="OpenDoc()" /> <menuitem value="Close" onclick="CloseDoc()" /> </popup> </menu> </syntaxhighlight> == 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 <code>JSON.parse()</code>. Ambos formatos carecen de un mecanismo para representar [[BLOB|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 {{cita web |url = http://barracudaserver.com/examples/BarracudaDrive/CommandLine.html#API |título = BarracudaDrive |idioma = inglés |urlarchivo = https://web.archive.org/web/20060521212003/http://barracudaserver.com/examples/BarracudaDrive/CommandLine.html#API |fechaarchivo = 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 [[C (lenguaje de programación)|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.org<ref>{{ cita web | url = http://www.JSON.org/example.html | título = Página de ejemplo | idioma = inglés | obra = JSON.org }}</ref> [[YAML]] es un superconjunto de JSON que trata de superar algunas de las limitaciones de este. Aunque es significativamente más complejo,<ref>{{cita web| url=http://bob.pythonmac.org/archives/2005/07/19/what-happened-to-yaml/| nombre=Bob| apellidos=Ippolito| título=What happened to YAML?| título-trad=¿Qué pasó con YAML?| fecha=19 de julio de 2005| fechaacceso=22 de noviembre de 2012| idioma=inglés| urlarchivo=https://web.archive.org/web/20120214050054/http://bob.pythonmac.org/archives/2005/07/19/what-happened-to-yaml/| fechaarchivo=14 de febrero de 2012}}</ref> 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]] * [[jq|Lenguaje jq]] para procesamiento de JSON == Referencias == {{listaref}} {{Control de autoridades}} [[Categoría:JSON]] [[Categoría:Lenguajes de programación]] [[Categoría:Navegadores web]] [[Categoría:Acrónimos de informática]] [[Categoría:Lenguajes de marcado]] [[Categoría:Formatos abiertos]]
Resumen:
Al guardar los cambios aceptas los
términos de uso
y liberas de forma irrevocable tu contribución conforme a los términos de las licencias
licencia CC BY-SA 4.0
y
GFDL
. Aceptas igualmente que un hipervínculo o URL es atribución suficiente conforme a la licencia Creative Commons.
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Buscar
Buscar
Edición de «
JSON
»
Añadir idiomas
Añadir tema