¿Qué es JSON? Un mejor formato para el intercambio de datos

La notación de objetos de JavaScript es una representación sin esquema, basada en texto, de datos estructurados que se basa en pares clave-valor y listas ordenadas. Aunque JSON se deriva de JavaScript, se admite de forma nativa o mediante bibliotecas en la mayoría de los principales lenguajes de programación. JSON se usa comúnmente, pero no exclusivamente, para intercambiar información entre clientes web y servidores web. 

Durante los últimos 15 años, JSON se ha vuelto omnipresente en la web. Hoy en día, es el formato de elección para casi todos los servicios web disponibles públicamente, y también se utiliza con frecuencia para servicios web privados.

La popularidad de JSON también ha dado lugar a que muchas bases de datos admitan JSON nativo. Las bases de datos relacionales como PostgreSQL y MySQL ahora se envían con soporte nativo para almacenar y consultar datos JSON. Las bases de datos NoSQL como MongoDB y Neo4j también admiten JSON, aunque MongoDB usa una versión binaria ligeramente modificada de JSON detrás de escena.

En este artículo, echaremos un vistazo rápido a JSON y discutiremos de dónde vino, sus ventajas sobre XML, sus inconvenientes, cuándo debe usarlo y cuándo debe considerar alternativas. Pero primero, profundicemos en lo esencial de cómo se ve JSON en la práctica.

Ejemplo JSON

A continuación, se muestra un ejemplo de datos codificados en JSON:

{

  "FirstName": "Jonathan",

  "LastName": "Freeman",

  "LoginCount": 4,

  "IsWriter": verdadero,

  "WorksWith": ["Spantree Technology Group", ""],

  "mascotas": [

    {

      "Nombre": "Lilly",

      "Tipo": "Mapache"

    }

  ]

}

La estructura anterior define claramente algunos atributos de una persona. Incluye un nombre y apellido, la cantidad de veces que la persona ha iniciado sesión, si esta persona es un escritor, una lista de empresas con las que trabaja y una lista de las mascotas de la persona (solo una, en este caso). Una estructura como la anterior se puede pasar de un servidor a un navegador web o una aplicación móvil, que luego realizará alguna acción, como mostrar los datos o guardarlos para referencia posterior.

JSON es un formato de datos genérico con un número mínimo de tipos de valor: cadenas, números, booleanos, listas, objetos y nulos. Aunque la notación es un subconjunto de JavaScript, estos tipos están representados en todos los lenguajes de programación comunes, lo que hace que JSON sea un buen candidato para transmitir datos a través de espacios de lenguaje.

Archivos JSON

Los datos JSON se almacenan en archivos que terminan con la extensión .json. De acuerdo con el espíritu de lectura humana de JSON, estos son simplemente archivos de texto sin formato y se pueden abrir y examinar fácilmente. Como explica el blog SQLizer, esto también es una clave para la interoperabilidad más amplia de JSON, ya que casi todos los idiomas que puede nombrar pueden leer y procesar archivos de texto sin formato, y son fáciles de enviar a través de Internet.

¿Por qué debería usar JSON? 

Para comprender la utilidad y la importancia de JSON, tendremos que comprender un poco la historia de la interactividad en la web. 

A principios de la década de 2000, la interactividad en la web comenzó a transformarse. En ese momento, el navegador servía principalmente como un cliente tonto para mostrar información, y el servidor hizo todo el trabajo duro para preparar el contenido para su visualización. Cuando un usuario hacía clic en un enlace o un botón en el navegador, se enviaba una solicitud al servidor, el servidor preparaba la información necesaria como HTML y el navegador mostraba el HTML como una nueva página. Este patrón era lento e ineficiente, lo que requería que el navegador volviera a representar todo en la página, incluso si solo una sección de la página había cambiado.

Debido a que las recargas de página completa eran costosas, los desarrolladores web buscaron tecnologías más nuevas para mejorar la experiencia general del usuario. Mientras tanto, la capacidad de realizar solicitudes web en segundo plano mientras se muestra una página, que se había introducido recientemente en Internet Explorer 5, estaba demostrando ser un enfoque viable para cargar datos de forma incremental para su visualización. En lugar de volver a cargar todo el contenido de la página, hacer clic en el botón de actualización desencadenaría una solicitud web que se cargaría en segundo plano. Cuando se cargan los contenidos, los datos se pueden manipular, guardar y mostrar en la página utilizando JavaScript, el lenguaje de programación universal en los navegadores.

REST vs SOAP: la conexión JSON

Originalmente, estos datos se transferían en formato XML (consulte un ejemplo a continuación) mediante un protocolo de mensajería llamado SOAP (Protocolo simple de acceso a objetos). Pero XML era detallado y difícil de administrar en JavaScript. JavaScript ya tenía objetos, que son una forma de expresar datos dentro del lenguaje, por lo que Douglas Crockford tomó un subconjunto de esa expresión como especificación para un nuevo formato de intercambio de datos y lo denominó JSON. JSON fue mucho más fácil de leer para las personas y para que los navegadores lo analizaran.

En el transcurso de la década del 2000, otra tecnología de servicios web, denominada Representational State Transfer, o REST, comenzó a superar a SOAP con el fin de transferir datos. Una de las grandes ventajas de programar con las API REST es que puede usar múltiples formatos de datos, no solo XML, sino también JSON y HTML. A medida que los desarrolladores web prefirieron JSON sobre XML, también prefirieron REST sobre SOAP. Como dijo Kostyantyn Kharchenko en el blog de Svitla, "En muchos sentidos, el éxito de REST se debe al formato JSON debido a su fácil uso en varias plataformas".

Hoy en día, JSON es el estándar de facto para el intercambio de datos entre clientes web y móviles y servicios back-end. 

JSON frente a XML

Como se señaló anteriormente, la principal alternativa a JSON es XML. Sin embargo, XML se está volviendo cada vez menos común en los nuevos sistemas, y es fácil ver por qué. A continuación se muestra una versión de los datos que vio anteriormente, esta vez en XML:

  Jonathan

  Hombre libre

  4

  cierto

    Grupo de tecnología Spantree

      Lilly

      Mapache

Además de ser más detallado (exactamente el doble en este caso), XML también introduce cierta ambigüedad al analizar una estructura de datos compatible con JavaScript. La conversión de XML a un objeto JavaScript puede llevar de decenas a cientos de líneas de código y, en última instancia, requiere una personalización basada en el objeto específico que se analiza. La conversión de JSON a un objeto JavaScript requiere una línea de código y no requiere ningún conocimiento previo sobre el objeto que se analiza.

Limitaciones de JSON

Aunque JSON es un formato de datos flexible y relativamente conciso con el que es fácil trabajar en muchos lenguajes de programación, existen algunos inconvenientes en el formato. Estas son las cinco limitaciones principales: 

  1. Sin esquema. Por un lado, eso significa que tiene total flexibilidad para representar los datos de la forma que desee. Por otro lado, significa que podría crear accidentalmente datos deformes con mucha facilidad.
  2. Solo un tipo de número: el formato de punto flotante de doble precisión IEEE-754. Eso es bastante complicado, pero simplemente significa que no puede aprovechar los diversos y matizados tipos de números disponibles en muchos lenguajes de programación.
  3. Sin tipo de fecha. Esta omisión significa que los desarrolladores deben recurrir al uso de representaciones de cadenas de fechas, lo que lleva a discrepancias de formato, o deben representar fechas en forma de milisegundos desde la época (1 de enero de 1970).
  4. Sin comentarios. Esto hace que sea imposible anotar campos en línea, lo que requiere documentación adicional y aumenta la probabilidad de malentendidos.
  5. Verbosidad. Si bien JSON es menos detallado que XML, no es el formato de intercambio de datos más conciso. Para servicios de gran volumen o de propósito especial, querrá utilizar formatos de datos más eficientes.

¿Cuándo debería usar JSON?

Si está escribiendo software que se comunica con un navegador o una aplicación móvil nativa, debe usar JSON como formato de datos. El uso de un formato como XML es una opción desactualizada y una señal de alerta para el talento móvil y de front-end que de otro modo le gustaría atraer.

En el caso de la comunicación de servidor a servidor, es mejor que utilice un marco de serialización como Apache Avro o Apache Thrift. JSON no es una mala elección aquí, y aún podría ser exactamente lo que necesita, pero la respuesta no es tan clara como para la comunicación web y móvil.

Si está utilizando bases de datos NoSQL, está prácticamente atascado con lo que le ofrece la base de datos. En las bases de datos relacionales que admiten JSON como tipo, una buena regla general es usarlo lo menos posible. Las bases de datos relacionales se han ajustado para datos estructurados que se ajustan a un esquema particular. Si bien la mayoría ahora admite datos más flexibles en forma de JSON, puede esperar un impacto en el rendimiento al consultar las propiedades dentro de esos objetos JSON.

JSON es el formato omnipresente y de facto para enviar datos entre servidores web y navegadores y aplicaciones móviles. Su diseño simple y su flexibilidad hacen que sea fácil de leer y comprender, y en la mayoría de los casos, fácil de manipular en el lenguaje de programación de su elección. La falta de un esquema estricto permite la flexibilidad del formato, pero esa flexibilidad a veces hace que sea difícil asegurarse de leer y escribir JSON correctamente.

Analizador JSON

La parte del código de una aplicación que transforma los datos almacenados como JSON en un formato que la aplicación puede usar se llama analizador. JavaScript, como era de esperar, incluye un analizador nativo, el método JSON.parse ().

Es posible que tenga que trabajar un poco más para trabajar con JSON en lenguajes fuertemente tipados como Scala o Elm, pero la adopción generalizada de JSON significa que hay bibliotecas y utilidades para ayudarlo en todas las partes más difíciles. 

El sitio web json.org incluye una lista completa de bibliotecas de código que puede usar para analizar, generar y manipular JSON, en lenguajes tan diversos como Python, C # y COBOL.

Utilidades JSON

Si está buscando manipular o examinar datos codificados en JSON directamente, sin escribir código usted mismo, existen varias utilidades en línea que pueden ayudarlo. Todos los equivalentes programáticos en las bibliotecas de código vinculadas anteriormente, pero puede cortar y pegar código JSON en estas herramientas basadas en navegador para ayudarlo a comprender mejor JSON o realizar análisis rápidos y sucios:

  • Formateador JSON: JSONLint formateará y validará el código JSON arbitrario.
  • Visor JSON: Stack.hu tiene un sitio que creará un árbol interactivo para ayudarlo a comprender la estructura de su código JSON. 
  • Embellecedor JSON: Si quieres "imprimir con estilo" tu código JSON, con colores de sintaxis y similares, Prettydiff puede ayudarte. 
  • Convertidor JSON: ¿ Necesita mover rápidamente datos de un formato JSON a otra cosa? Convertcsv.com tiene herramientas que pueden convertir JSON a CSV (que luego se puede abrir en Excel) o XML.

Tutorial JSON

¿Está listo para sumergirse y aprender más sobre cómo trabajar con JSON en sus aplicaciones interactivas? Mozilla Developer Network tiene un excelente tutorial que lo ayudará a comenzar con JSON y JavaScript. Si está listo para pasar a otros lenguajes, consulte el tutorial sobre el uso de JSON con Java (de Baeldung), con Python (de DataCamp) o con C # (de la Ayuda de pruebas de software). ¡Buena suerte!

Josh Fruhlinger contribuyó a este artículo.