Sunteți pe pagina 1din 8

RESUM

------------------------------------
Font: Web GeekyTheory
------------------------------------
||| TEMA1: Que es JSON
JSON (JavaScript Object Notation) es un formato para el intercambios de datos. D
escribe, identifica y gestiona datos.
Naci como una alternativa a XML, el fcil uso en javascript ha generado un gran num
ero de seguidores
Puede ser ledo por cualquier lenguaje de programacin.
Sintaxis JSON: http://www.w3schools.com/json/json_syntax.asp
|||Asignar un valor
"Nombre" : "Geeky Theory"
|||Tipos de datos
Nmero (entero o float)
String (entre comillas simples)
Booleano (true o false)
Array (entre corchetes [] )
Objeto (entre llaves {})
Null
|||Objetos JSON
{ "NombreFruta":"Manzana" , "Cantidad":20 }
|||Arrays JSON
{
"Frutas": [
{"NombreFruta":"Manzana", "Cantidad":10},
{"NombreFruta":"Pera", "Cantidad":20},
{"NombreFruta":"Naranja", "Cantidad":30}
]
}
|||Ejemplo: Fruteria
Creamos un objeto Fruteria, en el cual guardamos un array de 2 elementos.
Primer elemento: objeto fruta (contiene un array de NombreFruta y CantidadFruta)
Segundo elemento: objeto verdura (contiene un array de NombreVerdura y CantidadV
erdura)
{"Fruteria":
[
{"Fruta":
[
{"Nombre":"Manzana","Cantidad":10},
{"Nombre":"Pera","Cantidad":20},
{"Nombre":"Naranja","Cantidad":30}
]
},
{"Verdura":
[
{"Nombre":"Lechuga","Cantidad":80},
{"Nombre":"Tomate","Cantidad":15},
{"Nombre":"Pepino","Cantidad":50}
]
}
]
}
Imaginemos que nos gustara saber la cantidad de manzanas que tenemos. El path de
este array sera el siguiente:
Path: json['Fruteria'][0]['Fruta'][0]['Cantidad']
Existen herramientas online que ayudan a visualizar mejor un JSON. Una de las me
jores herramientas que he visto es la pgina JSON Viewer: JSONViewer: http://jsonv
iewer.stack.hu/
||| TEMA2: Creacin de un JSON a partir de una consulta MySQL
|||1. Generar una conexin a la base de datos
Para generar una consulta en una base de datos, primero tenemos que generar una
conexin con esta. Para hacerlo en PHP, podemos usar las funciones que vienen por
defecto en PHP5.
Estas funciones ayudan mucho a la hora de gestionar la informacin de la base de d
atos.
Una vez realizada la consulta debemos de eliminar la conexin a la base de datos.
Para conectarnos a la base de datos podemos usar sencilla funcin implementada po
r m, la cual devuelve en una variable, la conexin a la base de datos.
Esta conexin ser importante a la hora de realizar la consulta.
function connectDB(){

$conexion = mysqli_connect("SERVER", "USER", "PASS", "BASEDEDATOS");
if($conexion){
echo 'La conexin de la base de datos se ha hecho satisfactoriamente';
}else{
echo 'Ha sucedido un error inesperado en la conexin de la base de datos';
}
return $conexion;
}
Para la desconexin de la base de datos usamos la siguiente funcin, la cual devuelv
e un parmetro booleano indicando si la desconexin a tenido xito o no.
function disconnectDB($conexion){

$close = mysqli_close($conexion);

if($close){
echo 'La desconexin de la base de datos se ha hecho satisfactoriamente';
}else{
echo 'Ha sucedido un error inesperado en la desconexin de la base de dato
s';
}

return $close;
}
||| 2. Obtener un array multidimensional de una consulta
El siguiente paso es realizar la consulta. Para realizar la consulta tambin podem
os usar otra sencilla funcin implementada por m. Esta funcin tiene como parmetro de
entrada una orden SQL.
Para ms informacin sobre sentencias SQL recomiendo ver http://www.w3schools.com/sq
l/
function getArraySQL($sql){
//Creamos la conexin con la funcin anterior
$conexion = connectDB();

//generamos la consulta

mysqli_set_charset($conexion, "utf8"); //formato de datos utf8

if(!$result = mysqli_query($conexion, $sql)) die(); //si la conexin cancelar
programa

$rawdata = array(); //creamos un array

//guardamos en un array multidimensional todos los datos de la consulta
$i=0;

while($row = mysqli_fetch_array($result))
{
$rawdata[$i] = $row;
$i++;
}

disconnectDB($conexion); //desconectamos la base de datos

return $rawdata; //devolvemos el array
}
La funcin anterior devuelve un array multidimensional (una matriz).
Las columnas vienen representadas por los tipos de datos que hemos solicitado a
la base de datos y las filas vienen representadas por el dato en s.
Ejemplo:
IdFruta NombreFruta CantidadFruta
1 Manzana 100
2 Platano 167
3 Pera 820
Recordar que los ndices de un array empiezan en 0
Si pasamos la sentencia SQL que genera esta tabla en nuestra funcin obtendremos u
n array multidimensional
Si por ejemplo queremos obtener la cantidad de platanos tan slo tendriamos que bu
scar en el array de la siguiente forma:
array[1][2];
Para ms informacin ver Arrays en PHP: http://www.geekytheory.com/?s=array+en+php
||| 3. Generar JSON a partir del array
Una vez que ya tenemos nuestro array multidimensional tan solo nos queda transfo
rmar los datos de nuestro array a un formato JSON.
Para ello tenemos la suerte de que PHP nos ayuda en esta tarea, as pues, usaremos
la funcin json_encode($array).
Si hacemos un echo del resultado de esta funcin nos encontraremos con algo pareci
do a esto:
[{"0":"1","id_fruta":"1","1":"Manzana","nombre_fruta":"Manzana","2":"100","canti
dad":"100"},{"0":"2","id_fruta":"2","1":"Platano","nombre_fruta":"Platano","2":"
167","cantidad":"167"},{"0":"3","id_fruta":"3","1":"Pera","nombre_fruta":"Pera",
"2":"820","cantidad":"820"}]
Podemos observar grficamente este JSON con la herramienta JSONViewer: http://json
viewer.stack.hu/
Ejemplo completo de este tema, donde tendremos que rellenar las variables que ap
arecen al inicio del script.
<!--?php

$<span class="hiddenSpellError" pre=""-->sql = "SQL" //ejemplo frutera: SELECT id
_fruta,nombre_fruta,cantidad FROM tabla_fruta;

function connectDB(){

$server = "SERVER";
$user = "USER";
$pass = "PASS";
$bd = "BD";

$conexion = mysqli_connect($server, $user, $pass,$bd);

if($conexion){
echo 'La conexion de la base de datos se ha hecho satisfactoriamente
';
}else{
echo 'Ha sucedido un error inexperado en la conexion de la base de d
atos
';
}

return $conexion;
}

function disconnectDB($conexion){

$close = mysqli_close($conexion);

if($close){
echo 'La desconexion de la base de datos se ha hecho satisfactoriame
nte
';
}else{
echo 'Ha sucedido un error inexperado en la desconexion de la base d
e datos
';
}

return $close;
}

function getArraySQL($sql){
//Creamos la conexin con la funcin anterior
$conexion = connectDB();

//generamos la consulta

mysqli_set_charset($conexion, "utf8"); //formato de datos utf8

if(!$result = mysqli_query($conexion, $sql)) die(); //si la conexin cancelar
programa

$rawdata = array(); //creamos un array

//guardamos en un array multidimensional todos los datos de la consulta
$i=0;

while($row = mysqli_fetch_array($result))
{
$rawdata[$i] = $row;
$i++;
}

disconnectDB($conexion); //desconectamos la base de datos

return $rawdata; //devolvemos el array
}

$myArray = getArraySQL($sql);
echo json_encode($myArray);
?>
||| TEMA3: Gestionar JSON en PHP
||| 1. Usar la funcin json_decode para decodificar un JSON.
Partiendo del tutorial anterior y suponiendo que tenemos un JSON generado como e
ste:
[{"0":"1","id_fruta":"1","1":"Manzana","nombre_fruta":"Manzana","2":"100","canti
dad":"100"},{"0":"2","id_fruta":"2","1":"Platano","nombre_fruta":"Platano","2":"
167","cantidad":"167"},{"0":"3","id_fruta":"3","1":"Pera","nombre_fruta":"Pera",
"2":"820","cantidad":"820"}]
Vamos a usar la funcin json_decode sobre este JSON, para ello vamos a suponer que
nuestro JSON es un JSONArray, es decir que es un array de datos.
Para ello vamos a guardar en un array el resultado de decodificar el JSON.
$json = '[{"0":"1","id_fruta":"1","1":"Manzana","nombre_fruta":"Manzana","2":"10
0","cantidad":"100"},{"0":"2","id_fruta":"2","1":"Platano","nombre_fruta":"Plata
no","2":"167","cantidad":"167"},{"0":"3","id_fruta":"3","1":"Pera","nombre_fruta
":"Pera","2":"820","cantidad":"820"}]';

$array = json_decode($json);
||| 2. Entender cmo funciona la funcin json_decode.
Si nos remontamos al primer tutorial sobre JSON recordaremos que un JSON se comp
one de JSON Objects y de JSON Arrays.
As pues la funcin json_decode decodifica el String que le introducimos y separa lo
s JSON Objects y los JSON Arrays de tal forma que una vez que se han separado (v
irtualmente),
se vuelven a componer en un Array que en nuestro caso ser la variable de salida $
array.
Para observar que se ha generado un Array se puede usar la funcin print_r sobre la
variable $array de salida.
print_r($array);
En nuestro ejemplo nos mostrar lo siguiente:
Array ( [0] => stdClass Object ( [0] => 1 [id_fruta] => 1 [1] => Manzana [nombre
_fruta] => Manzana [2] => 100 [cantidad] => 100 ) [1] => stdClass Object ( [0] =
> 2 [id_fruta] => 2 [1] => Platano [nombre_fruta] => Platano [2] => 167 [cantida
d] => 167 ) [2] => stdClass Object ( [0] => 3 [id_fruta] => 3 [1] => Pera [nombr
e_fruta] => Pera [2] => 820 [cantidad] => 820 ) )
Como se han creado una key por cada campo de nuestro JSON, podemos obtener el da
to directamente escribiendo el ndice del array o el nombre del mismo.
||| 3. Ejemplos de uso.
A continuacin se van a explicar varias maneras de obtener datos de un JSON as como
de recorrer un array que contiene los datos de un JSON.
Obtener un dato directamente del array
echo $array[0]->nombre_fruta; // Obtenemos "Manzana"
Recorrer y recuperar valores de un objeto JSON con foreach
foreach($array as $obj){
$id_fruta = $obj->id_fruta;
$nombre_fruta = $obj->nombre_fruta;
$cantidad = $obj->cantidad;
echo $id_fruta." ".$nombre_fruta." ".$cantidad;
echo "
";
}
El resultado del cdigo anterior s el siguiente:
1 Manzana 100
2 Pltano 167
3 Pera 820
Recorrer y recuperar valores de un objeto JSON con un bucle for
for($i=0;$i<count($array);$i++){ $id_fruta="$array[$i]-">id_fruta;
$nombre_fruta = $array[$i]->nombre_fruta;
$cantidad = $array[$i]->cantidad;
echo $id_fruta." ".$nombre_fruta." ".$cantidad;
echo "
";
}
El resultado es el mismo que en el anterior cdigo
||| TEMA4: Ejemplo prctico de uso de JSON con OpenWeatherMap
Para ver un ejemplo de uso de JSON vamos a usar la API de OpenWeatherMap, esta A
PI proporciona informacin general sobre el tiempo (temperatura, localizacin, etc)
en funcin de una localizacin.
Para usar esta API debemos incluir el nombre del lugar donde queremos obtener el
tiempo al final del siguiente enlace:
http://api.openweathermap.org/data/2.5/weather?q=bigastro
En mi caso buscaremos la informacin del tiempo de mi pueblo natal Bigastro. si us
amos como ejemplo mi pueblo natal obtendremos un JSON como este:
{"coord":{"lon":-0.9,"lat":38.06},"sys":{"message":0.0991,"country":"Spain","sun
rise":1392619830,"sunset":1392659075},"weather":[{"id":801,"main":"Clouds","desc
ription":"few clouds","icon":"02n"}],"base":"cmc stations","main":{"temp":288.15
,"pressure":1012,"humidity":72,"temp_min":288.15,"temp_max":288.15},"wind":{"spe
ed":5.1,"deg":60},"rain":{"3h":0},"clouds":{"all":20},"dt":1392661800,"id":25130
76,"name":"Bigastro","cod":200}
Usando el visualizador JSONViewer, el cual hemos usado en anteriores tutoriales,
obtenemos la siguiente informacin:
A modo de ejemplo vamos a crear una aplicacin en PHP que lea el JSON obtenido a p
artir del servicio web de OpenWeatherMap, seguidamente, vamos a extraer la infor
macin til de este JSON.
Los datos que obtendremos sern los siguientes:
A modo de ejemplo vamos a crear una aplicacin en PHP que lea el JSON obtenido a p
artir del servicio web de OpenWeatherMap, seguidamente, vamos a extraer la infor
macin til de este JSON. Los datos que obtendremos sern los siguientes:
Ciudad
Latitud
Longitud
Temperatura
Temperatura Mx
Temperatura Mn
Presin
Humedad
Velocidad del viento
Estado del cielo
Descripcin del estado del cielo
A continuacin vamos a realizar un script/app en PHP que lea el JSON generado por
la API de OpenWeatherMap y muestre la informacin til por pantalla.
En primer lugar, crearemos un formulario donde introduzcamos la ciudad donde que
remos obtener los datos del tiempo:
<meta charset="UTF-8">

<form method="get" action="">
<label>
Ciudad
</label>
<input type = "text" name="c">
<input type = "submit" value="Mostrar el Tiempo">
</form>
Este formulario enva los datos de un input a as misma mediante el mtodo GET.
Estos datos son procesado por PHP, en primer lugar veremos que los datos del inp
ut no vienen vacos, para esto escribimos las siguiente sentencia en PHP:
if($_GET["c"]==null) die();
Seguidamente si el campo no esta vacio, vamos a obtener el JSON que genera la AP
I de OpenWeatherMap gracias a la funcin file_get_contents, el contenido de este J
SON lo vamos a almacenar en la variable $html:
$html = file_get_contents("http://api.openweathermap.org/data/2.5/weather?q=".$_
GET["c"]);
Una vez que hemos obtenido todo el cdigo html, es decir el JSON crudo que nos env
ia la API de OpenWeatherMap vamos a decodificar el JSON con la funcin json_decode
:
$json = json_decode($html);
Una vez que tenemos almacenado en la variable $json toda la informacin del JSON o
btenido de la API vamos a extraer la informacin til de el.
Para ello vamos a almacenar en variables con nombres orientativos la informacin d
el JSON:
$ciudad = $json->name;
$lat = $json->coord->lat;
$lon = $json->coord->lon;
$temp = $json->main->temp;
$tempmax = $json->main->temp_max;
$tempmin = $json->main->temp_min;
$presion = $json->main->pressure;
$humedad = $json->main->humidity;
$vel_viento = $json->main->temp;
$estado_cielo = $json->weather[0]->main;
$descripcion = $json->weather[0]->description;
Lo ltimo que quedara sera mostrar la informacin como queramos, en mi caso no he hech
o un gran estilo, tan slo he mostrado la informacin con echos. El cdigo que he real
izado para esta parte es el siguiente:
echo "<h3>Ciudad: ".$ciudad." [lat = ".$lat. ", lon = ".$lon. " ]</h3>";
echo "<b>Estado del cielo: </b>".$estado_cielo."<br>";
echo "<b>Descripcin: </b>".$descripcion."<br>";
echo "<br>";
echo "<b>Temperatura: </b>".$temp." K [Mx: ".$tempmax."K, Mn: ".$tempmin."K]<br>";
echo "<b>Presin: </b>".$presion."<br>";
echo "<b>Humedad: </b>".$humedad."<br>";
echo "<br><br><br><br><br>";
Una captura de lo que generara mi ciudad natal llamada Bigastro se muestra a cont
inuacin:
http://i2.wp.com/geekytheory.com/wp-content/uploads/2014/02/Captura21.png
El cdigo completo aqu:
<meta charset="UTF-8">

<form method="get" action="">
<label>
Ciudad
</label>
<input type = "text" name="c">
<input type = "submit" value="Mostrar el Tiempo">
</form>
<?php

if($_GET["c"]==null) die();

$html = file_get_contents("http://api.openweathermap.org/data/2.5/weather?q=".$_
GET["c"]);

$json = json_decode($html);

$ciudad = $json->name;
$lat = $json->coord->lat;
$lon = $json->coord->lon;
$temp = $json->main->temp;
$tempmax = $json->main->temp_max;
$tempmin = $json->main->temp_min;
$presion = $json->main->pressure;
$humedad = $json->main->humidity;
$vel_viento = $json->main->temp;
$estado_cielo = $json->weather[0]->main;
$descripcion = $json->weather[0]->description;

echo "<h3>Ciudad: ".$ciudad." [lat = ".$lat. ", lon = ".$lon. " ]</h3>";
echo "<b>Estado del cielo: </b>".$estado_cielo."<br>";
echo "<b>Descripcin: </b>".$descripcion."<br>";
echo "<br>";
echo "<b>Temperatura: </b>".$temp." K [Mx: ".$tempmax."K, Mn: ".$tempmin."K]<br>";
echo "<b>Presin: </b>".$presion."<br>";
echo "<b>Humedad: </b>".$humedad."<br>";
echo "<br><br><br><br><br>";
?>

S-ar putea să vă placă și