JSON con Flash

Como comentabamos hace poco en JSON con Mootools, JSON es un formato para intercambio de datos que a diferencia de XML es mucho mas ligero pues se transmite la información como un objeto Javascript. En esta oportunidad veremos como utilizar JSON con Flash.

Cargando Flash

Obteniendo los Datos
Los datos en formato JSON para nuestro ejemplo lo obtendremos del servicio Google Ajax Search API del cual hemos comentado en un post anterior, para ello creamos un proxy el cual se encargará de hacer el cambio de dominio para poder acceder a esta información.

[php]
$apiQue = “Google”; // variable a consultar
$apiKey = “tu_key_google”; // key para acceder al servicio
$apiUrl = “http://ajax.googleapis.com/ajax/services/search/web”;
if (isset($_GET[‘query’])){
$apiQue = urlencode($_GET[‘query’]);
}
readfile($apiUrl.”?v=1.0&key=”.$apiKey.”&q=”.$apiQue);
[/php]

Utilizando JSON con ActionScript 3
Por defecto Flash no puede interpretar JSON, pero para ello utilizaremos la librería as3corelib el cual contiene una gran variedad de clases para extender la funcionalidades del AS3 entre ellas un parser de JSON. Entonces descargamos los archivos y utilizamos las clase ubicadas en la carpeta com.

En nuestro archivo fla lo primero que hacemos es importar las clases necesarias para el funcionamiento de nuestro script.

  1. import com.adobe.serialization.json.*;

Lo siguiente es leer el archivo que contiene la respuesta en JSON del servidor, esto lo hacemos con la clase URLLoader, luego agregamos un listener para detectar que se ha completado la carga para luego ejecutar la función decodeJSON.

  1. var loader:URLLoader = new URLLoader() ;
  2. var request:URLRequest = new URLRequest() ;
  3. request.url = "proxy.php?query=unijimpe";
  4. loader.load(request) ;
  5. loader.addEventListener(Event.COMPLETE, decodeJSON) ;

Luego definimos al función decodeJSON, la cual se ejecutará inmediatamente después de completarse la carga de los datos, aquí utilizamos el método JSON.decode el cual se encarga de convertir el texto en formato JSON a un objeto que sera fácilmente manipulable con ActionScript.

  1. function decodeJSON(event:Event):void {
  2.    var loader:URLLoader = URLLoader(event.target)
  3.    var data:Object = JSON.decode(loader.data);
  4.    var results = data.responseData.results;
  5.    for (var i=0; i<results.length; i++) {
  6.       var tmp = results&#91;i&#93;;
  7.       trace(i + " --> " + tmp.title + "\n" + tmp.url);
  8.    }
  9. }

Unimos estos elementos y tenemos un parser de JSON de manera sencilla, como podemos ver lo que se hace es convertir el texto cargado en un objeto que es muy fácil de manipular en Flash.

Completando nuestra aplicación
En el ejemplo anterior, solo hemos trazado los resultados, es momento de agregar un campo de texto para ingresar el criterio de búsqueda y otro campo de texto para mostrar los resultados, con lo cual obtenemos el siguiente código.

  1. import com.adobe.serialization.json.*;
  2.  
  3. var vPath:String = "proxy.php?query=";
  4. var vRequ:URLRequest = new URLRequest();
  5. var vLoad:URLLoader = new URLLoader();
  6. vRequ.url = vPath+"unijimpe";
  7. vLoad.load(vRequ);
  8. vLoad.addEventListener(Event.COMPLETE, onLoaded);
  9.  
  10. function onLoaded(event:Event){
  11.    var rpta:URLLoader = URLLoader(event.target);   
  12.    var json:Object = JSON.decode(rpta.data);
  13.    var data:Array = json.responseData.results;
  14.    var vcon:String = "";
  15.    for (var i:Number=0; i<data.length; i++) {
  16.       var tmp = data&#91;i&#93;;
  17.       vcon+= "<a href='"+tmp.url+"'>"+tmp.title+"</a>";
  18.       vcon+= "<br>"+tmp.content+"<br><br>";
  19.    }
  20.    txtcontent.htmlText = vcon;
  21.    scroller.scrollTarget = txtcontent;
  22. }
  23.  
  24. btsearch.addEventListener(MouseEvent.CLICK, onClick);
  25. btsearch.buttonMode = true;
  26. function onClick(e:Event) {
  27.    txtcontent.htmlText = "Loading...";
  28.    vRequ.url = vPath+escape(txtQuery.text);
  29.    vLoad.load(vRequ);
  30. }

El resultado de este ejemplo lo pueden ver al inicio de este post, como se observa ingresamos el criterio de búsqueda y obtenemos el resultado deseado. Finalmente les dejo los archivos fuente de este ejemplo para que lo descarguen y puedan realizar sus pruebas.

Comentarios Total 2 comentarios


ekameleon
Publicado: 05/08/2008 2:04 am

Puedes utilisar mi opensource framework con el “vegas.string.JSON” implementation :

http://code.google.com/p/vegas/wiki/VegasTutorialsString_JSON

y es mejor de utilisar “eden” :
http://code.google.com/p/edenrr/

EKA+ :)

Karla Marroquín
Publicado: 24/11/2010 11:47 am

Es importante mencionar que lo que regresa el JSON es un arreglo multidimensional. De tal forma que si tienen varios datos, la forma de accesarlos es:

json = JSON.decode(rpta.data);
trace(json[0][“nombre”]);
trace(json[1][“nombre”]);

trace(json[0][“recetas”]);
trace(json[0][“recetas”].length);
trace(json[0][“recetas”][0][“id”]);
trace(json[0][“recetas”][0][“titulo”]);

y asi sucesivamente dependiendo de su estructura.

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)