7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Flash

Entendiendo JSON

Scroll to top
Read Time: 10 mins

Spanish (Español) translation by Andrea Jiménez (you can also view the original English article)

JSON (JavaScript Object Notation, que yo pronuncio "Jason" y que puedes pronunciar como quieras) es un formato de datos basado en texto que está diseñado para ser legible por humanos, ligero y fácil de transmitir entre un servidor y un cliente web. Su sintaxis se deriva de JavaScript, de ahí el nombre, pero se puede usar en la mayoría de los lenguajes, incluidos AS3 y C#.


Matrices

Si has programado mucho, te habrás encontrado con matrices antes: colecciones de elementos, cada uno asignado a un número entero específico.

En JSON, una matriz de las primeras seis letras del alfabeto se representaría de la siguiente manera:

Los codificadores de AS3 y JavaScript encontrarán la lista anterior muy familiar. También es similar a la forma de definir una matriz de C#.

Como probablemente supongas, los corchetes dicen "esto es una matriz", y las comas se utilizan para separar diferentes elementos (ten en cuenta que no hay coma después del elemento final). Suponiendo que el lenguaje en el que analiza JSON usa matrices de base cero (¿y cuántos idiomas no lo hacen en estos días?), el elemento 0 será "a", 1 será "b", 2 será "c", y así sucesivamente.

Para que las matrices sean más fáciles de leer, a menudo las escribiremos con nuevas líneas y sangría adicionales:

Ten en cuenta que todavía no hay ninguna coma después del elemento final, por lo que ahora se ve un poco extraño.

No tenemos que usar cadenas como elementos de una matriz JSON; también podemos usar números, true, false y null. No hay una escritura estricta, lo que significa que puedes mezclar los tipos de valores que utilizas en una matriz determinada. Por ejemplo, esto es perfectamente válido:

Ten en cuenta que debes utilizar comillas dobles (") para rodear todas las cadenas; las comillas simples (') no están permitidas. Sí, este es el caso, aunque JavaScript te permite incluir cadenas en cualquier tipo de cita. Si quieres utilizar comillas dobles dentro de cadenas JSON, utiliza el valor \" en su lugar.


Objetos

Una matriz es una colección de elementos donde cada uno se asigna a un entero específico. Un objeto es una colección de elementos donde cada uno está asignado a una cadena específica. Los elementos se denominan valores y las cadenas utilizadas para identificarlos se denominan claves. Algunos lenguajes de programación llaman a este tipo de estructura de datos una tabla hash o un mapa hash.

Podríamos representar las edades de las personas en un objeto así:

Las llaves dicen "esto es un objeto" y, al igual que con las matrices, las comas separan diferentes elementos. Sin embargo, los elementos se dan en pares, esta vez. Es más fácil ver si añadimos algunas nuevas líneas y sangría:

En cada par, dos puntos separan la clave (que es una cadena) del valor (que, en este caso, es un número). Cuando estábamos haciendo una matriz, no necesitábamos especificar a qué entero se asignó cada elemento (es decir, solo necesitábamos especificar los valores y no las claves), porque se asignaron en función del orden en que se escribieron en la matriz.

En lugar de solicitar el segundo o quinto elemento, como lo harías al acceder a una matriz, con un objeto, solicitarás el elemento "Alan" o "Eliza".

Para hacer las cosas más confusas, los objetos también te permiten usar cadenas como valores, no solo como claves. Así que podrías tener un objeto como este:

De esta manera, para recuperar la dirección URL de un sitio De Tuts+ determinado, puedes solicitarlo utilizando el nombre del sitio como clave. Sin embargo, lo contrario no es cierto: no puedes usar "http://cg.tutsplus.com/" para recuperar "Cgtuts+".

Las mismas reglas sobre los diferentes tipos de comillas se aplican a los objetos que a las matrices. Los objetos también pueden usar cadenas, números, true, false y null como valores (pero solo cadenas como claves).


Anidación

Los objetos y matrices también pueden almacenar otros objetos y matrices. Esto nos permite crear estructuras de datos anidadas; por ejemplo:

Veamos eso con un poco más de espacio en blanco:

Cada objeto contiene dos campos: uno con la clave "url" cuyo valor es una cadena que contiene la dirección URL del sitio y otro con la clave hasPremium cuyo valor es un valor booleano que es true si el sitio tiene una sección Premium.

Sin embargo, no estamos restringidos a tener exactamente la misma estructura para cada objeto en el JSON. Por ejemplo, podríamos agregar una URL adicional que apunte a la URL del programa Premium, pero solo para aquellos sitios que tengan una:

Incluso podríamos incluir una serie de los últimos tutoriales Premium para un sitio determinado (solo mostraré Activetuts+ aquí y lo limitaré a unos pocos Premium, para ahorrar espacio):

Una matriz tiene sentido para enumerar los Premium, porque estoy trabajando bajo la suposición de que cualquier aplicación que realmente lea estos datos solo mostrará una lista de tutoriales Premium, en lugar de tener que acceder a ellos según su nombre, por lo que no es necesario asignarles a cada uno una clave de cadena.

Podríamos llevar esto aún más lejos:

¡Uf! Si quisiéramos, podríamos crear objetos que contengan los nombres y las URL de perfil de cada autor de cada tutorial Premium, ¿puedes encontrar la mejor manera de hacerlo?

Mantener matrices dentro de matrices también puede ser útil; especialmente para juegos. Este podría ser el diseño actual de una placa Tic-Tac-Toe:

¿No lo ves? Intenta eliminar algunos espacios en blanco:

1 es un cero, 2 es una cruz y 0 es un espacio vacío. ¡Los ceros ganan! Y estoy seguro de que puedes ver cómo se podría usar algo similar para Battleships o Connect 4 o Minesweeper. Para obtener más información sobre matrices anidadas, revisa mi tutorial anterior.


Usar JSON con diferentes plataformas

Dado que JSON es tan popular, hay analizadores (herramientas y bibliotecas que decodifican un lenguaje de programación para que otro pueda entenderlo) y generadores (herramientas y bibliotecas que hacen lo contrario; codifican un lenguaje de programación en otro) disponibles para la mayoría de los lenguajes de programación. Sólo tienes que buscar [analizador JSON (nombre de tu idioma]. Destacaré algunos que son relevantes para los lectores de Activetuts+.


Para Flash y AS3

La biblioteca estándar para codificar y decodificar datos JSON en AS3 es as3corelib; consulta mi guía sobre el uso de bibliotecas externas si no estás seguro de cómo instalarlo.

Puedes decodificar una cadena con formato JSON en objetos y matrices AS3 pasándola a com.adobe.serialization.json.JSON.decode(); el valor de retorno será una matriz o un objeto, según el JSON. Si pasa false como segundo argumento, el decodificador no seguirá el estándar JSON tan estrictamente, por lo que puedes salirte con la tuya con el formato más descuidado.

Puedes codificar un objeto o una matriz AS3 (que puede contener matrices y objetos anidados) en una cadena JSON pasándola a com.adobe.serialization.json.JSON.encode(); el valor de retorno será una cadena.

Se anunció que las futuras versiones de Flash incluirán el análisis JSON nativo, por lo que pronto no habrá necesidad de usar as3corelib para ese propósito.


Para .NET (incluido Silverlight)

Para analizar JSON, simplemente agrega una referencia a System.Json. Entonces:

Codificar un objeto en una cadena JSON es un poco más complicado. Primero debes crear un contrato de datos para el tipo de objeto que deseas codificar; llamemos al nuestro Thing, y al objeto real myThing. Entonces:

También puedes utilizar este método para decodificar una cadena JSON en una clase específica de objeto:

Para obtener más información, consulta las páginas de MSDN Trabajar con datos JSON y Cómo: serializar y deserializar datos JSON.


Para JavaScript (y por lo tanto aplicaciones HTML 5)

Podrías simplemente pasar la cadena JSON a eval() en JavaScript, pero esto es un riesgo de seguridad terrible. La mayoría de los navegadores modernos admiten una función JSON.parse(), que analizará una cadena JSON en objetos JavaScript, y JSON.stringify(), que convertirá un objeto o matriz JavaScript en una cadena JSON.

Douglas Crockford creó una biblioteca para hacer esto en navegadores más antiguos; está disponible en github.


Para Unity

Hay un ensamblado de C# llamado LitJSON que puedes usar en tus proyectos de Unity para analizar y generar JSON. Puedes usar esto incluso si tu proyecto está escrito en JavaScript o Boo en lugar de C#.

Para decodificar un objeto Unity en una cadena JSON:

Para codificar una cadena JSON en un objeto Unity de tipo Thing:

El manual LitJSON es genial; Recomiendo leer eso para obtener más orientación.


Para otros lenguajes

JSON.org tiene una larga lista de bibliotecas para varias plataformas y lenguajes diferentes, además, puedes buscar en Google, como mencioné anteriormente ;)

Ese sitio también tiene algunas visualizaciones excelentes de cómo se puede construir JSON, y un montón de detalles que van más allá de lo que he explicado en esta introducción rápida. ¡Compruébalo si quieres saber más!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.