lunes, 4 de mayo de 2009

Comunicar PHP con J2ME mediante JSON

q tal:
Les traigo una interesante y potente manera de comunicar nuestros midlets con scripts php alojados en algun servidor Web mediante un formato de representacion de datos mas ligero que XML y muy acpetado por los programadores.

JSON?::
"Javascript Object Notation" es un formato ligero de intercambio de datos, similar a XML, pero basado en JS. La simplicidad de este lo ha llevado a ser una alternativa a XML en el uso de AJAX, ya que es mucho mas sencillo escribir un parser de JSON en Javascript.
http://www.json.org/
El autor cuidadosamente ha elaborado librerias para soportar y usar JSON en muchos lenguajes de programación.. De las cuales usaremos la perteneciente a PHP y a J2ME.


Un ejemplo básico que e elaborado es el siguiente:
script PHP del lado del servidor:

require_once("JSON.php");
$oJSON = new JSON();

//Definimos un array de objetos en notacion JSON.
//El objeto consta en el atributo nombre y un array de provincias.
$sJSON= "[{\"nombre\":\"Peru\",\"provincias\":[\"Lima\",\"Piura\",\"Lambayeque\",
\"Cajamarca\",\"Ucayali\",\"Cuzco\",\"Puno\",\"Tacna\"]},{\"nombre\":\"Espana\",
\"provincias\":[\"Saragoza\",\"Sevilla\",\"Barcelona\",\"Madrid\",\"Valencia\",
\"Villareal\",\"Cataluna\"]},{\"nombre\":\"Argentina\",\"provincias\":[\"la Plata\"
,\"Cordova\",\"Buenos Aires\",\"San Lorenzo\"]}]";

$oUbicacion = $oJSON->decode($sJSON);
$sSalida="[]";
$pais=$_REQUEST['pais'];//recibimos en la cadena de petición el país escogido.

if(!empty($pais)){//si existe
for($i=0;$inombre==$pais){
//obtenemos las provincias del aís escogido

$sSalida = $oJSON->encode($oUbicacion[$i]->provincias);
break;
}
}

echo $sSalida ;

JAVA :
Del lado del cliente: Leeremos JSON desde J2ME utilizando la libreria JSON j2me.

//cadena de conexión:
String url = "http://servidor/pagina1.php?pais=Peru"

........
//decodificamos la respuesta del servidor...
try{
JSONArray jsonArray=new JSONArray(respuesta);

respuesta="Las Provincias obtenidas son:\n\t";
for(int i=0;i < jsonArray.length();i++){

respuesta+=jsonArray.getString(i);

respuesta+="\n\t";
}
}catch(JSONException exe){;}




No hay comentarios: