JSON ( JavaScript Object Notation , pronunciado / ˈdʒeɪsən / o / ˈdʒeɪˌsɒn / ) es un formato de archivo estándar abierto y un formato de intercambio de datos que utiliza texto legible para almacenar y transmitir objetos de datos compuestos por pares nombre-valor y matrices (u otros valores serializables ). Es un formato de datos de uso común con diversas aplicaciones en el intercambio electrónico de datos , incluyendo aplicaciones web con servidores .
JSON es un formato de datos independiente del lenguaje de programación . Se derivó de JavaScript , pero muchos lenguajes de programación modernos incluyen código para generar y analizar datos en formato JSON. Los nombres de archivo JSON utilizan la extensión .json.
Douglas Crockford especificó originalmente el formato JSON a principios de la década de 2000. [ 1 ] Ellos [ a ] y Chip Morningstar enviaron el primer mensaje JSON en abril de 2001.
Nombres y pronunciación
La norma internacional de 2017 (ECMA-404 e ISO/IEC 21778:2017) especifica que "JSON" se pronuncia / ˈ dʒ eɪ . s ə n / , como en ' Jason y los Argonautas ' " . [ 3 ] [ 4 ] La primera edición (2013) de ECMA-404 no abordó la pronunciación. [ 5 ] Crockford dijo en 2011: "Hay mucha discusión sobre cómo se pronuncia, pero a mí no me importa en absoluto". [ 1 ] / ˈ dʒ eɪ ˌ s ɒ n / es otra pronunciación común. [ 6 ]
Estándares
Después de que RFC 4627 estuviera disponible como su especificación "informativa" desde 2006, JSON se estandarizó por primera vez en 2013, como ECMA -404. [ 5 ] RFC 8259, publicado en 2017, es la versión actual del estándar de Internet STD 90, y sigue siendo coherente con ECMA-404. [ 7 ] Ese mismo año, JSON también se estandarizó como ISO/IEC 21778:2017. [ 3 ] Los estándares ECMA e ISO/IEC describen solo la sintaxis permitida, mientras que RFC cubre algunas consideraciones de seguridad e interoperabilidad . [ 8 ]
Historia

JSON surgió de la necesidad de un protocolo de comunicación de sesión en tiempo real entre el servidor y el navegador sin utilizar complementos del navegador como Flash o applets de Java , los métodos dominantes utilizados a principios de la década de 2000. [ 9 ]
Crockford fue el primero en especificar y popularizar el formato JSON. [ 1 ] El acrónimo se originó en State Software, una empresa cofundada por Crockford y otros en marzo de 2001. Los cofundadores acordaron construir un sistema que utilizara las capacidades estándar del navegador y proporcionara una capa de abstracción para que los desarrolladores web crearan aplicaciones web con estado que tuvieran una conexión dúplex persistente a un servidor web al mantener abiertas dos conexiones del Protocolo de Transferencia de Hipertexto (HTTP) y reciclarlas antes de que expiraran los tiempos de espera estándar del navegador si no se intercambiaban más datos. Los cofundadores tuvieron una mesa redonda y votaron sobre si llamar al formato de datos JSML (JavaScript Markup Language) o JSON (JavaScript Object Notation), así como bajo qué tipo de licencia ponerlo a disposición. El sitio web JSON.org [ 10 ] se lanzó en 2001. En diciembre de 2005, Yahoo! comenzó a ofrecer algunos de sus servicios web en JSON. [ 11 ]
Un precursor de las bibliotecas JSON se utilizó en un proyecto de juego de comercio de activos digitales para niños llamado Cartoon Orbit en Communities.com , que utilizaba un complemento del lado del navegador con un formato de mensajería propietario para manipular elementos DHTML . Tras el descubrimiento de las primeras capacidades de Ajax , digiGroups, Noosh y otros utilizaron marcos para pasar información al campo visual del navegador del usuario sin actualizar el contexto visual de una aplicación web, logrando aplicaciones web enriquecidas en tiempo real utilizando únicamente las capacidades estándar de HTTP, HTML y JavaScript de Netscape 4.0.5+ e Internet Explorer 5+. Crockford descubrió entonces que JavaScript podía utilizarse como un formato de mensajería basado en objetos para dicho sistema. El sistema se vendió a Sun Microsystems , Amazon.com y EDS .
JSON se basa en un subconjunto del lenguaje de scripting JavaScript (específicamente, el estándar ECMA -262, 3.ª edición, diciembre de 1999 [ 12 ] ) y se usa comúnmente con JavaScript, pero es un formato de datos independiente del lenguaje . El código para analizar y generar datos JSON está disponible en muchos lenguajes de programación . El sitio web de JSON enumera las bibliotecas JSON por lenguaje.
En octubre de 2013, Ecma International publicó la primera edición de su estándar JSON ECMA-404. [ 5 ] Ese mismo año, RFC 7158 utilizó ECMA-404 como referencia. En 2014, RFC 7159 se convirtió en la referencia principal para los usos de JSON en Internet, reemplazando a RFC 4627 y RFC 7158 (pero conservando ECMA-262 y ECMA-404 como referencias principales). En noviembre de 2017, ISO/IEC JTC 1/SC 22 publicó ISO/IEC 21778:2017 [ 3 ] como estándar internacional. El 13 de diciembre de 2017, el Grupo de Trabajo de Ingeniería de Internet (IETF) dejó obsoleto RFC 7159 al publicar RFC 8259 , que es la versión actual del estándar de Internet STD 90. [ 7 ]
Crockford añadió una cláusula a la licencia JSON que establecía: «El software deberá utilizarse para el bien, no para el mal», con el fin de liberar el código fuente de las bibliotecas JSON y, al mismo tiempo, burlarse de los abogados corporativos y de aquellos que son excesivamente pedantes. Por otro lado, esta cláusula generó problemas de compatibilidad de la licencia JSON con otras licencias de código abierto, ya que el software de código abierto y el software libre generalmente no implican restricciones en cuanto a su propósito de uso. [ 13 ]
Sintaxis
El siguiente ejemplo muestra una posible representación JSON que describe a una persona.
{ "first_name" : "John" , "last_name" : "Smith" , "is_alive" : true , "age" : 27 , "address" : { "street_address" : "21 2nd Street" , "city" : "New York" , "state" : "NY" , "postal_code" : "10021-3100" }, "phone_numbers" : [ { "type" : "home" , "number" : "212 555-1234" }, { "type" : "office" , "number" : "646 555-4567" } ], "children" : [ "Catherine" , "Thomas" , "Trevor" ], "spouse" : null }Codificación de caracteres
Aunque Crockford afirmó originalmente que JSON es un subconjunto estricto de JavaScript y ECMAScript , [ 14 ] su especificación en realidad permite documentos JSON válidos que no son JavaScript válidos; JSON permite que los terminadores de línea Unicode U+2028 LINE SEPARATOR y U+2029 PARAGRAPH SEPARATOR aparezcan sin escape en cadenas entre comillas, mientras que ECMAScript 2018 y versiones anteriores no lo permiten. [ 15 ] [ 16 ] Esto es consecuencia de que JSON solo prohíbe los "caracteres de control". Para una máxima portabilidad , estos caracteres se escapan con barra invertida.
El intercambio JSON en un ecosistema abierto debe estar codificado en UTF-8 . [ 7 ] La codificación admite el conjunto completo de caracteres Unicode , incluidos aquellos caracteres fuera del Plano Multilingüe Básico (U+0000 a U+FFFF). Sin embargo, si se escapan, esos caracteres deben escribirse usando pares subrogados UTF-16 . Por ejemplo, para incluir el carácter Emoji U+1F610 😐 NEUTRAL FACE en JSON:
{ "cara" : "😐" }O:
{ "cara" : "\uD83D\uDE10" }JSON se convirtió en un subconjunto estricto de ECMAScript a partir de la revisión de 2019 del lenguaje. [ 16 ] [ 17 ]
Tipos de datos
Los tipos de datos básicos de JSON son:
- Número: un número decimal con signo que puede contener una parte fraccionaria y puede usar la notación exponencial E, pero no puede incluir valores que no sean números, como NaN . El formato no distingue entre enteros y números de coma flotante. JavaScript usa el formato de coma flotante de doble precisión IEEE-754 para todos sus valores numéricos (posteriormente también admite BigInt [ 18 ] ), pero otros lenguajes que implementan JSON pueden codificar los números de manera diferente.
- Cadena : una secuencia de cero o más caracteres Unicode . Las cadenas están delimitadas por comillas dobles y admiten una sintaxis de escape con barra invertida .
- Booleano : cualquiera de los valores
trueofalse - Arreglo : una lista ordenada de cero o más elementos, cada uno de los cuales puede ser de cualquier tipo. Los arreglos utilizan la notación de corchetes con elementos separados por comas.
- Objeto : una colección de pares nombre-valor donde los nombres (también llamados claves) son cadenas de caracteres. El estándar ECMA actual establece: "La sintaxis JSON no impone ninguna restricción a las cadenas utilizadas como nombres, no requiere que las cadenas de nombres sean únicas y no asigna ningún significado al orden de los pares nombre/valor". [ 19 ] Los objetos se delimitan con llaves y se utilizan comas para separar cada par, mientras que dentro de cada par, el carácter de dos puntos ":" separa la clave o el nombre de su valor.
null: un valor vacío, usando la palabranull
Se permite el uso de espacios en blanco alrededor o entre elementos sintácticos (valores y puntuación, pero no dentro de un valor de cadena), pero se ignora. Cuatro caracteres específicos se consideran espacios en blanco para este propósito: espacio , tabulación horizontal , salto de línea y retorno de carro . En particular, la marca de orden de bytes no debe ser generada por una implementación conforme (aunque puede aceptarse al analizar JSON) . JSON no proporciona sintaxis para comentarios . [ 20 ]
Las primeras versiones de JSON (como las especificadas en la RFC 4627 ) requerían que un texto JSON válido consistiera únicamente en un objeto o una matriz, que podía contener otros tipos en su interior. Esta restricción se eliminó en la RFC 7158 , donde un texto JSON se redefinió como cualquier valor serializado.
Los números en JSON son independientes de su representación en los lenguajes de programación. Si bien esto permite serializar números de precisión arbitraria42 , puede generar problemas de portabilidad. Por ejemplo, dado que no se distingue entre valores enteros y de punto flotante, algunas implementaciones pueden tratar , 42.0, y 4.2E+1como el mismo número, mientras que otras no. El estándar JSON no establece requisitos sobre detalles de implementación como desbordamiento , subdesbordamiento , pérdida de precisión, redondeo o ceros con signo , pero recomienda no esperar más que la precisión IEEE 754 binary64 para una "buena interoperabilidad". No existe una pérdida de precisión inherente al serializar una representación binaria a nivel de máquina de un número de punto flotante (como binary64) en una representación decimal legible por humanos (como los números en JSON) y viceversa; existen algoritmos publicados para realizar esta conversión de forma exacta y óptima. [ 21 ]
Los comentarios se excluyeron intencionalmente de JSON. En 2012, Douglas Crockford describió su decisión de diseño de la siguiente manera: "Eliminé los comentarios de JSON porque vi que la gente los usaba para contener directivas de análisis, una práctica que habría destruido la interoperabilidad". [ 20 ]
JSON no permite las "comas finales", es decir, una coma después del último valor dentro de una estructura de datos. [ 22 ] Las comas finales son una característica común de los derivados de JSON para mejorar la facilidad de uso. [ 23 ]
Interoperabilidad
El RFC 8259 describe ciertos aspectos de la sintaxis JSON que, si bien son válidos según las especificaciones, pueden causar problemas de interoperabilidad.
- Algunas implementaciones de JSON solo aceptan textos JSON que representan un objeto o una matriz. Para garantizar la interoperabilidad, las aplicaciones que intercambian JSON deben transmitir mensajes que sean objetos o matrices.
- Las especificaciones permiten objetos JSON que contienen varios miembros con el mismo nombre. El comportamiento de las implementaciones que procesan objetos con nombres duplicados es impredecible. Para garantizar la interoperabilidad, las aplicaciones deben evitar nombres duplicados al transmitir objetos JSON.
- Las especificaciones indican claramente que el orden de los miembros en los objetos JSON no es relevante. Para garantizar la interoperabilidad, las aplicaciones deben evitar atribuir significado al orden de los miembros, incluso si el software de análisis sintáctico lo hace visible.
- Si bien las especificaciones no imponen límites a la magnitud o precisión de los literales numéricos JSON, la implementación de JavaScript, ampliamente utilizada, los almacena como cantidades "binary64" IEEE754. Para garantizar la interoperabilidad, las aplicaciones deben evitar transmitir números que no puedan representarse de esta manera, como por ejemplo, 1E400 o 3.141592653589793238462643383279.
- Si bien las especificaciones no restringen la codificación de caracteres Unicode en un texto JSON, la gran mayoría de las implementaciones asumen la codificación UTF-8 ; para garantizar la interoperabilidad, las aplicaciones siempre deben codificar los mensajes JSON únicamente en UTF-8.
- Las especificaciones no prohíben la transmisión de secuencias de bytes que representen incorrectamente caracteres Unicode. Para garantizar la interoperabilidad, las aplicaciones deben transmitir mensajes que no contengan dichas secuencias de bytes.
- La especificación no restringe la forma en que las aplicaciones comparan las cadenas Unicode. Para garantizar la interoperabilidad, las aplicaciones siempre deben realizar dichas comparaciones unidad de código por unidad de código.
En 2015, la IETF publicó el RFC 7493 , que describe el "Formato de Mensaje I-JSON", un perfil restringido de JSON que limita la sintaxis y el procesamiento de JSON para evitar, en la medida de lo posible, estos problemas de interoperabilidad.
Semántica
Si bien JSON proporciona un marco sintáctico para el intercambio de datos, el intercambio de datos inequívoco también requiere un acuerdo entre el productor y el consumidor sobre la semántica del uso específico de la sintaxis JSON. [ 24 ] Un ejemplo de dónde es necesario tal acuerdo es la serialización de tipos de datos que no forman parte del estándar JSON, por ejemplo, fechas y expresiones regulares .
Metadatos y esquema
El tipo MIME oficial para texto JSON es application/json, [ 25 ] y la mayoría de las implementaciones modernas lo han adoptado. Los tipos MIME heredados incluyen text/json, text/x-json, y text/javascript. [ 26 ] La extensión de archivo estándar es .json. [ 27 ]
JSON Schema especifica un formato basado en JSON para definir la estructura de los datos JSON para validación, documentación y control de interacción. Proporciona un contrato para los datos JSON requeridos por una aplicación determinada y cómo se pueden modificar esos datos. [ 28 ] JSON Schema se basa en los conceptos de XML Schema (XSD) pero está basado en JSON. Al igual que en XSD, se pueden usar las mismas herramientas de serialización/deserialización tanto para el esquema como para los datos, y es autodescriptivo. Está especificado en un borrador de Internet en el IETF, siendo la última versión a partir de 2024 "Draft 2020-12". [ 29 ] Hay varios validadores disponibles para diferentes lenguajes de programación, [ 30 ] cada uno con distintos niveles de conformidad.
El estándar JSON no admite referencias a objetos , pero existe un borrador de estándar IETF para referencias a objetos basadas en JSON. [ 31 ]
Usos
JSON-RPC es un protocolo de llamada a procedimiento remoto (RPC) basado en JSON, que sustituye a XML-RPC o SOAP . Es un protocolo sencillo que define solo unos pocos tipos de datos y comandos. JSON-RPC permite que un sistema envíe notificaciones (información al servidor que no requiere respuesta) y realice múltiples llamadas al servidor, las cuales pueden ser respondidas en cualquier orden.
AJAJ (o JavaScript asíncrono y JSON ) utiliza la misma metodología de páginas web dinámicas que Ajax , pero en lugar de XML , emplea JSON como formato de datos. AJAJ es una técnica de desarrollo web que permite que una página web solicite nuevos datos después de cargarse en el navegador . Normalmente, genera nuevos datos desde el servidor en respuesta a las acciones del usuario en dicha página. Por ejemplo, lo que el usuario escribe en un cuadro de búsqueda , el código del lado del cliente lo envía al servidor, que responde inmediatamente con una lista desplegable de elementos coincidentes de la base de datos .
JSON se ha utilizado ocasionalmente como lenguaje de configuración . Sin embargo, no admite comentarios . En 2012, Douglas Crockford, creador de JSON, comentó lo siguiente sobre los comentarios en JSON cuando se utiliza como lenguaje de configuración: «Sé que la falta de comentarios entristece a algunos, pero no debería. Supongamos que utilizas JSON para guardar archivos de configuración que deseas anotar. Puedes insertar todos los comentarios que quieras. Luego, pásalo por JSMin [ 32 ] antes de entregárselo a tu analizador JSON». [ 20 ]
MongoDB utiliza datos similares a JSON para su base de datos orientada a documentos .
Algunas bases de datos relacionales han añadido soporte para tipos de datos JSON nativos, como JSONB en PostgreSQL [ 33 ] y JSON en MySQL. [ 34 ] Esto permite a los desarrolladores insertar datos JSON directamente sin tener que convertirlos a otro formato.
Seguridad
El hecho de que JSON sea un subconjunto de JavaScript puede llevar a la idea errónea de que es seguro pasar textos JSON a la eval()función JavaScript. Esto no es seguro, debido a que ciertos textos JSON válidos, específicamente aquellos que contienen U+2028 LINE SEPARATOR o U+2029 PARAGRAPH SEPARATOR , no eran código JavaScript válido hasta que las especificaciones de JavaScript se actualizaron en 2019, por lo que los motores más antiguos pueden no admitirlo. [ 35 ] Para evitar los muchos escollos causados por ejecutar código arbitrario de Internet, se agregó una nueva función, , por primera vez en la quinta edición de ECMAScript, [ 36 ] que desde 2017 es compatible con todos los navegadores principales. Para los navegadores no compatibles, Douglas Crockford proporciona una biblioteca JavaScript compatible con la API . [ 37 ] Además, la propuesta TC39 "Subsume JSON" hizo que ECMAScript fuera un superconjunto estricto de JSON a partir de la revisión del lenguaje de 2019. [ 16 ] [ 17 ] Varias implementaciones de analizadores JSON han sufrido ataques de denegación de servicio y vulnerabilidades de asignación masiva . [ 38 ] [ 39 ]JSON.parse()
Alternativas
JSON se promociona como una alternativa de bajo consumo de recursos a XML, ya que ambos formatos cuentan con un amplio soporte para su creación, lectura y decodificación en las situaciones reales en las que se utilizan habitualmente. [ 40 ] Dependiendo del caso de uso específico, las alternativas a JSON incluyen:
- Para formatos de texto, CSV y superconjuntos de JSON (ver más abajo). Ion también ofrece un formato de texto que es un superconjunto de JSON (mayor variedad de tipos primarios, anotaciones, comentarios y permite comas al final). [ 41 ]
- Para un procesamiento más rápido a costa de la legibilidad humana, los formatos de intercambio de datos que pueden expresar todos los objetos JSON (es decir, que tienen un modelo de datos que es un superconjunto de JSON) incluyen CBOR (un estándar RFC de IETF) e Ion binario. [ 41 ] Google Protocol Buffers también puede cubrir este nicho debido a la capacidad de ser analizado sin un esquema, pero no está diseñado como un lenguaje de intercambio. Además, bases de datos como SQLite y PostgreSQL tienen sus propias representaciones binarias internas llamadas "JSONB", no destinadas a uso externo. [ 42 ]
XML
XML se ha utilizado para describir datos estructurados y para serializar objetos. Existen varios protocolos basados en XML para representar el mismo tipo de estructuras de datos que JSON para los mismos propósitos de intercambio de datos. Los datos se pueden codificar en XML de varias maneras. La forma más extensa que utiliza pares de etiquetas da como resultado una representación mucho mayor (en número de caracteres) que JSON, pero si los datos se almacenan en atributos y en forma de etiqueta corta donde la etiqueta de cierre se reemplaza por />, la representación suele ser aproximadamente del mismo tamaño que JSON o solo un poco mayor. [ 43 ] Sin embargo, un atributo XML solo puede tener un único valor y cada atributo puede aparecer como máximo una vez en cada elemento.
XML separa los datos de los metadatos (mediante el uso de elementos y atributos), mientras que JSON no tiene ese concepto.
Otra diferencia clave reside en el direccionamiento de valores. JSON utiliza objetos con una simple correspondencia clave-valor, mientras que en XML el direccionamiento se realiza mediante nodos , cada uno de los cuales recibe un ID único a través del procesador XML. Además, el estándar XML define un atributo común xml:idque el usuario puede utilizar para establecer un ID explícitamente.
Los nombres de las etiquetas XML no pueden contener ninguno de los caracteres , ni un espacio, y no pueden comenzar con , , ni un dígito numérico, mientras que las claves JSON sí pueden (incluso si se deben escapar las comillas y la barra invertida). [ 44 ]!"#$%&'()*+,/;<=>?@[\]^`{|}~-.
Los valores XML son cadenas de caracteres , sin seguridad de tipos integrada . XML tiene el concepto de esquema , que permite tipado fuerte, tipos definidos por el usuario, etiquetas predefinidas y una estructura formal, lo que permite la validación formal de un flujo XML. JSON tiene varios tipos integrados y un concepto de esquema similar en JSON Schema .
Superseries
Se ha considerado útil el soporte para comentarios y otras características, lo que ha llevado a la creación de varios superconjuntos JSON no estándar. Entre ellos se encuentran HJSON, [ 46 ] HOCON y JSON5 (que, a pesar de su nombre, no es la quinta versión de JSON). [ 47 ] [ 48 ]
YAML
YAML versión 1.2 es un superconjunto de JSON; las versiones anteriores no eran estrictamente compatibles. Por ejemplo, escapar una barra diagonal /con una barra invertida \es válido en JSON, pero no lo era en YAML. [ 49 ] YAML admite comentarios, mientras que JSON no. [ 49 ] [ 47 ] [ 20 ]
CSON
CSON (" CoffeeScript Object Notation") utiliza una sangría significativa y claves sin comillas, y presupone una declaración de objeto externa. Se utilizó para configurar el editor de texto Atom de GitHub . [ 50 ] [ 51 ] [ 52 ]
También existe un proyecto independiente llamado CSON ("Cursive Script Object Notation") que es sintácticamente más similar a JSON. [ 53 ]
HOCON
HOCON ("Human-Optimized Config Object Notation") es un formato para datos legibles por humanos y un superconjunto de JSON. [ 54 ] Los usos de HOCON son:
- Se utiliza principalmente junto con Play Framework , [ 55 ] y es desarrollado por Lightbend .
- También es compatible como formato de configuración para proyectos .NET a través de Akka.NET [ 56 ] [ 57 ] y Puppet . [ 58 ]
- TIBCO Streaming: [ 59 ] HOCON es el formato de archivo de configuración principal para la familia de productos TIBCO Streaming [ 60 ] (StreamBase, LiveView y Artifact Management Server) a partir de la versión 10 de TIBCO Streaming. [ 61 ]
- También es el formato de archivo de configuración principal para varios subsistemas de Exabeam Advanced Analytics. [ 62 ]
- Jitsi lo usa como el "nuevo" sistema de configuración y los archivos .properties como alternativa [ 63 ] [ 64 ]
JSON5
JSON5 ("Formato de Intercambio de Datos JSON5") es una extensión de la sintaxis JSON que, al igual que JSON, también es una sintaxis JavaScript válida. La especificación se inició en 2012 y se finalizó en 2018 con la versión 1.0.0. [ 65 ] Las principales diferencias con la sintaxis JSON son:
- comas finales opcionales
- Claves de objeto sin comillas
- Cadenas de texto entre comillas simples y multilínea
- Formatos de números adicionales
- Comentarios
La sintaxis JSON5 es compatible con algunos programas como una extensión de la sintaxis JSON, por ejemplo en SQLite . [ 66 ]
JSONC
JSONC (JSON con comentarios) es un subconjunto de JSON5 utilizado en Visual Studio Code de Microsoft : [ 67 ] [ 68 ]
- admite comentarios de una sola línea (
//) y comentarios en bloque (/* */) [ 69 ] - Acepta comas al final, pero no se recomiendan y el editor mostrará una advertencia.
Derivados
Se han creado varios formatos de serialización a partir de la especificación JSON. Algunos ejemplos son:
- GeoJSON , un formato diseñado para representar características geográficas simples [ 70 ] [ 71 ]
- JSON-LD , un método para codificar datos enlazados usando JSON [ 72 ] [ 73 ]
- JSON-RPC , un protocolo de llamada a procedimiento remoto codificado en JSON [ 74 ]
- JsonML , un lenguaje de marcado ligero utilizado para mapear entre XML y JSON [ 75 ] [ 76 ]
- Smile (formato de intercambio de datos) [ 77 ] [ 78 ]
- UBJSON , un formato binario de intercambio de datos informáticos que imita a JSON, pero que requiere menos bytes de datos [ 79 ] [ 80 ]
- Jsonnet es un lenguaje específico de dominio basado en prototipos que produce archivos JSON. Todos los documentos JSON son programas Jsonnet válidos que se generarán sin cambios al ejecutarse. Jsonnet extiende JSON al admitir variables, importaciones, bucles, comentarios, etc. [ 81 ] [ 82 ] Jsonnet se utiliza como lenguaje de configuración para la ingeniería de infraestructura en la nube. [ 83 ]
Véase también
- BSON
- Comparación de formatos de serialización de datos
- Notación de datos extensible
- Amazon Ion : un superconjunto de JSON (aunque limitado a UTF-8 , como JSON para intercambio, a diferencia del JSON general).
- Jackson (API)
- JAQL : un lenguaje funcional de procesamiento y consulta de datos, utilizado comúnmente para el procesamiento de consultas JSON.
- jq – un "lenguaje de consulta JSON" y un lenguaje de programación de alto nivel
- JSONiq : un lenguaje de consulta y procesamiento orientado a JSON basado en XQuery.
- Transmisión JSON
- Expresión S
Notas
- ↑ Crockford utiliza los neopronombres pe/per . [ 2 ] Este artículo utiliza they/them para mayor simplicidad y comprensión.
Referencias
- 1 2 3 Crockford, Douglas (28 de agosto de 2011). La saga JSON (video) . Biblioteca YUI . Recuperado el 21 de febrero de 2022 a través de YouTube .
- Transcripción (archivada el 30/10/2019) de Transcript Vids
- ^ Crockford, Douglas (8 de diciembre de 2022). "Pronombres" . Consultado el 16 de febrero de 2026 .
Mis pronombres son 'pe'/'per'.
- 1 2 3 "ISO/IEC 21778:2017 Tecnología de la información — Sintaxis de intercambio de datos JSON" . ISO . Consultado el 24 de junio de 2025 .
- ↑ "ECMA-404: Sintaxis de intercambio de datos JSON" (2.ª ed.). Ecma International . Diciembre de 2017. p. iii, nota al pie. Archivado (PDF) del original el 27 de octubre de 2019. Recuperado el 29 de abril de 2024 .
- 1 2 3 "ECMA-404: El formato de intercambio de datos JSON" (1.ª ed.). Ecma International . Octubre de 2013. Archivado (PDF) del original el 1 de noviembre de 2013. Recuperado el 20 de noviembre de 2023 .
- ↑ Sweigart, Al (2015). Automatiza las tareas aburridas con Python: Programación práctica para principiantes . No Starch Press . pág. 319. ISBN 9781593276850Recuperado el 29 de octubre de 2019.
Se pronuncia 'JAY-sawn' o 'Jason'; no importa cómo, porque de cualquier manera la gente dirá que lo estás pronunciando mal
.(suponiendo la fusión de cot-caught : "sawn" / s ɔː n / → [sɒn] ). - 1 2 3 T. Bray (diciembre de 2017). El formato de intercambio de datos JSON (JavaScript Object Notation) . Grupo de trabajo de ingeniería de Internet . doi : 10.17487/RFC8259 . ISSN 2070-1721 . STD 90. RFC 8259 . Estándar de Internet 90. Obsoleto RFC 7159 .
- ↑ Bray, Tim. "JSON Redux, también conocido como RFC7159" . En curso . Consultado el 16 de marzo de 2014 .
- ↑ "Historia no oficial de Java" . Edu4Java . 26 de mayo de 2014. Archivado del original el 26 de mayo de 2014. Consultado el 30 de agosto de 2019.
En 1996, Macromedia lanza la tecnología Flash, que ocupa el espacio dejado por Java y ActiveX, convirtiéndose en el estándar de facto para la animación del lado del cliente.
- ↑ "JSON" . json.org .
- ↑ Yahoo!. "Uso de JSON con los servicios web de Yahoo!" . Archivado del original el 11 de octubre de 2007. Consultado el 3 de julio de 2009 .
- ↑ Crockford, Douglas (28 de mayo de 2009). "Introducción a JSON" . json.org . Consultado el 3 de julio de 2009.
Se basa en un subconjunto del lenguaje de programación JavaScript, estándar ECMA-262, 3.ª edición, diciembre de 1999
. - ↑ " Apache y la licencia JSON " en LWN.net por Jake Edge (30 de noviembre de 2016).
- ↑ Douglas Crockford (10 de julio de 2016). "JSON en JavaScript" . Archivado del original el 10 de julio de 2016. Recuperado el 13 de agosto de 2016. JSON
es un subconjunto de la notación literal de objetos de JavaScript.
- ↑ Holm, Magnus (15 de mayo de 2011). "JSON: El subconjunto de JavaScript que no existe" . El repositorio atemporal. Archivado del original el 13 de mayo de 2012. Recuperado el 23 de septiembre de 2016 .
- 1 2 3 "Subsumir JSON: Propuesta para que todo el texto JSON sea válido ECMA-262" . Ecma TC39. 23 de agosto de 2019. Recuperado el 27 de agosto de 2019 .
- 1 2 "Avanzar a la etapa 4 - tc39/proposal-json-superset" . GitHub . 22 de mayo de 2018.
- ↑ "BigInt - Glosario de documentos web de MDN" . Mozilla . Consultado el 18 de octubre de 2020 .
- ↑ ECMA-404, 2.ª ed. , pág. 3 : "La sintaxis JSON no impone ninguna restricción a las cadenas utilizadas como nombres, no requiere que las cadenas de nombres sean únicas y no asigna ningún significado al orden de los pares nombre/valor."
- 1 2 3 4 5 Crockford, Douglas (30 de abril de 2012). "Comentarios en JSON" . Archivado del original el 30 de julio de 2016. Recuperado el 30 de agosto de 2019. Eliminé
los comentarios de JSON porque vi que la gente los usaba para contener directivas de análisis, una práctica que habría destruido la interoperabilidad. Sé que la falta de comentarios entristece a algunas personas, pero no debería. Supongamos que está usando JSON para mantener archivos de configuración, que le gustaría anotar. Adelante, inserte todos los comentarios que desee. Luego, páselo por
JSMin
antes de entregárselo a su analizador JSON.
- ↑ Andrysco, Marc; Jhala, Ranjit; Lerner, Sorin (18 de febrero de 2016). Impresión de números de punto flotante: un método siempre correcto (PDF) (Informe) . Recuperado el 31 de mayo de 2025 .
- ↑ "Comas finales - JavaScript | MDN" . developer.mozilla.org . 12 de septiembre de 2023 . Consultado el 16 de diciembre de 2023 .
- ↑ "JSON5" . json5. Archivado del original el 29 de noviembre de 2020. Recuperado el 16 de diciembre de 2020 .
- ↑ ECMA-404, 2.ª ed. , p. iii : «La sintaxis JSON no es una especificación de un intercambio de datos completo. Un intercambio de datos significativo requiere un acuerdo entre un productor y un consumidor sobre la semántica asociada a un uso particular de la sintaxis JSON. Lo que JSON sí proporciona es el marco sintáctico al que se puede asociar dicha semántica».
- ↑ "Tipos de medios" . iana.org . Consultado el 13 de septiembre de 2015 .
- ↑ "Encabezado Content-Type correcto para JSON" . ReqBin . 13 de enero de 2023. Consultado el 23 de marzo de 2024 .
- ↑ Bray, Tim (diciembre de 2017). Bray, T. (ed.). "11. Consideraciones de IANA" . RFC 8259: El formato de intercambio de datos de notación de objetos JavaScript (JSON) . IETF . doi : 10.17487/RFC8259 . S2CID 263868313 .
- ↑ "Esquema JSON e Hiperesquema" . json-schema.org . Consultado el 8 de junio de 2021 .
- ↑ "Esquema JSON - Enlaces de especificación" . json-schema.org . Consultado el 22 de marzo de 2024 .
- ↑ "Implementaciones de esquemas JSON" . json-schema.org . Archivado del original el 16 de junio de 2021. Consultado el 8 de junio de 2021 .
- ↑ Zyp, Kris (16 de septiembre de 2012). Bryan, Paul C. (ed.). "Referencia JSON: draft-pbryan-zyp-json-ref-03" . Grupo de trabajo de ingeniería de Internet .
- ↑ Crockford, Douglas (16 de mayo de 2019). "JSMin" . Recuperado el 12 de agosto de 2020. JSMin
[2001] es una herramienta de minificación que elimina comentarios y espacios en blanco innecesarios de archivos JavaScript.
- ↑ "Tipo de datos JSONB" . www.cockroachlabs.com . Consultado el 1 de abril de 2025 .
- ↑ "El tipo de datos JSON" . dev.mysql.com . Consultado el 1 de abril de 2025 .
- ↑ "JSON: El subconjunto de JavaScript que no es" . Magnus Holm. Archivado del original el 13 de mayo de 2012. Recuperado el 16 de mayo de 2011 .
- ↑ "ECMA-262: Especificación del lenguaje ECMAScript" (5.ª ed.). Diciembre de 2009. Archivado (PDF) del original el 14 de abril de 2011. Consultado el 18 de marzo de 2011 .
- ↑ "douglascrockford/JSON-js" . GitHub . 13 de agosto de 2019.
- ↑ "Vulnerabilidad de denegación de servicio y creación de objetos inseguros en JSON (CVE-2013-0269)" . Consultado el 5 de enero de 2016 .
- ↑ "Vulnerabilidad de denegación de servicio en el procesamiento de contenido JSON de Microsoft .NET Framework" . Archivado del original el 6 de noviembre de 2018. Consultado el 5 de enero de 2016 .
- ↑ "JSON: La alternativa sin complicaciones a XML" . json.org . Consultado el 14 de marzo de 2011 .
- 1 2 "Amazon Ion" . Amazon . Archivado del original el 12 de agosto de 2024. Recuperado el 26 de agosto de 2024 .
- ↑ "El formato JSONB de SQLite" . sqlite.org .
- ↑ Lee, David (6 de agosto de 2013). Fat Markup: Desmontando el mito del margen de beneficio de los productos grasos, caloría a caloría . Balisage: The Markup Conference 2013. Montreal, Canadá. doi : 10.4242/BalisageVol10.Lee01 . ISBN 978-1-935958-06-2.
- ↑ "Especificación XML 1.1" . Consorcio World Wide Web . Consultado el 26 de agosto de 2019 .
- ↑ Saternos, Casimir (2014). Aplicaciones web cliente-servidor con Javascript y Java . O'Reilly Media, Inc. pág. 45. ISBN 9781449369316.
- ↑ Edelman, Jason; Lowe, Scott; Oswalt, Matt. Programabilidad y automatización de redes . O'Reilly Media .
Para la representación de datos, puede elegir uno de los siguientes: YAML, YAMLEX, JSON, JSON5, HJSON o incluso Python puro.
- 1 2 McCombs, Thayne (16 de julio de 2018). "Por qué JSON no es un buen lenguaje de configuración" . Lucid Chart . Recuperado el 15 de junio de 2019 .
- ↑ "HOCON (Human-Optimized Config Object Notation)" . GitHub . 28 de enero de 2019. Consultado el 28 de agosto de 2019. El
objetivo principal es: mantener la semántica (estructura de árbol; conjunto de tipos; codificación/escapado) de JSON, pero hacerlo más conveniente como formato de archivo de configuración editable por humanos.
- 1 2 "YAML no es lenguaje de marcado (YAML) versión 1.2" . yaml.org . Consultado el 13 de septiembre de 2015 .
- ↑ Dohm, Lee (2014). "Notación de objetos CoffeeScript" . El gran libro de Atom . Archivado del original el 22 de abril de 2023. Recuperado el 29 de abril de 2024 .
- ↑ "Personalización básica" . Manual de vuelo de Atom . GitHub . Archivado del original el 29 de abril de 2024. Consultado el 29 de abril de 2024 .
- ↑ "CSON" . Bevry. 20 de diciembre de 2023. Archivado del original el 23 de abril de 2024. Recuperado el 29 de abril de 2024 – vía GitHub .
- ↑ Seonghoon, Kang (1 de julio de 2021). "CSON" . Archivado del original el 16 de diciembre de 2023. Recuperado el 27 de febrero de 2023 a través de GitHub .
- ↑ "config/HOCON.md en master · lightbend/config" . GitHub . Consultado el 5 de agosto de 2021 .
- ↑ "Archivo de configuración - 2.5.x" . www.playframework.com . Consultado el 5 de agosto de 2021 .
- ↑ Documentación de Akka.NET HOCON
- ↑ "Documentación de Akka.NET" . getakka.net . Consultado el 5 de agosto de 2021 .
- ↑ "Gestión de archivos de configuración HOCON con Puppet" . Archivado del original el 11 de febrero de 2017. Consultado el 4 de marzo de 2023 .
- ↑ "Documentación de StreamBase" . docs.streambase.com . Consultado el 5 de agosto de 2021 .
- ↑ "Guía de configuración" . docs.streambase.com . Consultado el 5 de agosto de 2021 .
- ↑ "Archivo de novedades y contenido destacado de StreamBase" . docs.streambase.com . Consultado el 5 de agosto de 2021 .
- ↑ "Notas de la versión de Exabeam Advanced Analytics" . Archivado del original el 20 de octubre de 2020. Consultado el 4 de marzo de 2023 .
- ↑ Proyecto JITSI. "Fase de configuración 1" . GitHub . Consultado el 16 de febrero de 2021 .
- ↑ Proyecto JITSI. "reference.conf" . GitHub . Consultado el 16 de febrero de 2021 .
- ↑ "El formato de intercambio de datos JSON5" . Consultado el 25 de junio de 2022 .
- ↑ SQLite. "Funciones y operadores JSON" . Consultado el 25 de junio de 2023 .
- ↑ "JSON con comentarios: edición de JSON en Visual Studio Code" . Visual Studio Code . Microsoft . Consultado el 29 de abril de 2024 .
- ↑ Del Sole, Alessandro (2023). «Compatibilidad con lenguajes y funciones de edición de código». Visual Studio Code Distilled (3.ª ed.). Apress. p. 46. doi : 10.1007/978-1-4842-9484-0_3 . ISBN 978-1-4842-9484-0.
- ↑ Frisbie, Matt (2025). "The Extension Manifest". Building Browser Extensions . Berkeley, California: Apress. doi : 10.1007/979-8-8688-1594-2_5 . ISBN 979-8-8688-1594-2.
- ↑ Butler, H.; Daly, M.; Doyle, A.; Gillies, Sean; Schaub, T.; Hagen, Stefan (agosto de 2016). "RFC 7946 - El formato GeoJSON" . IETF Datatracker . Recuperado el 17 de junio de 2022 .
- ↑ "GeoJSON" . geojson.org . Consultado el 7 de agosto de 2022 .
- ↑ "JSON-LD 1.1" . Consorcio World Wide Web . 16 de julio de 2020. Consultado el 17 de junio de 2022 .
- ↑ "JSON-LD - JSON para vincular datos" . json-ld.org . Consultado el 7 de agosto de 2022 .
- ↑ "JSON-RPC" . jsonrpc.org . Consultado el 17 de junio de 2022 .
- ↑ "JsonML (JSON Markup Language)" . JsonML.org . Consultado el 17 de junio de 2022 .
- ↑ McKamey, Stephen (14 de junio de 2022), JsonML , consultado el 7 de agosto de 2022
- ↑ "FasterXML/smile-format-specification: Nuevo hogar para el formato Smile" . GitHub . Consultado el 17 de junio de 2022 .
- ↑ Gupta, Ayush (10 de febrero de 2019). "Understanding Smile — A data format based on JSON" . Code with Ayush . Recuperado el 7 de agosto de 2022 .
- ↑ "Especificación Universal Binary JSON: la especificación de formato universalmente compatible para Binary JSON" . ubjson.org . Consultado el 17 de junio de 2022 .
- ↑ "UBJSON - JSON para C++ moderno" . json.nlohmann.me . Consultado el 7 de agosto de 2022 .
- ↑ Bryan Feuling "Repetibilidad, fiabilidad y escalabilidad mediante GitOps" . 2021. pág. 129.
- ↑ William Hegedus. "Dominando a Prometeo" . 2024. págs. 194-198.
- ↑ Eric Liang y Aaron Davidson "Infraestructura declarativa con el lenguaje de plantillas Jsonnet" . 2017.
Enlaces externos
- JSON
- Ajax (programación)
- Introducciones relacionadas con la informática en 2001
- Normas Ecma
- normas ISO
- Lenguajes de marcado
- Formatos abiertos