Vous êtes sur la page 1sur 12

Tu mejor ayuda para aprender a hacer webs

www.desarrolloweb.com

Trabajar con JSON desde PHP

Autores del manual


Este manual ha sido realizado por los siguientes colaboradores de DesarrolloWeb.com:
Miguel Angel Alvarez
Director de DesarrolloWeb.com
http://www.desarrolloweb.com
(4 captulos)

Manual de Trabajar con JSON desde PHP : http://www.desarrolloweb.com/manuales/php-json.html


Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.

Tu mejor ayuda para aprender a hacer webs


www.desarrolloweb.com

Libreras JSON para PHP


JSON es una notacin Javascript para escribir objetos que se ha hecho bastante popular en el
mundo del desarrollo de webs y que se utiliza en diversos lenguajes de programacin,
componentes (habitualmente Ajax), etc. Su xito se debe a que es una excelente forma para
almacenar informacin que deseamos compartir entre distintos componentes o lenguajes de
las aplicaciones web. Si trabajamos con Ajax y alguno de los frameworks Javascript existentes,
ya habremos notado esta posibilidad y posiblemente ya estemos utilizando JSON o una
notacin similar.
JSON, cuyas siglas significan JavaScript Object Notation (en espaol Notacin de Objetos de
JavaScript), es un formato ligero, fcil de escribir o codificar, as como tambin es fcil de leer
por los seres humanos. Desde Javascript podemos procesar directamente cualquier objeto
JSON y existen libreras para la mayora de los lenguajes de programacin que tienen
funciones para interpretar este formato. Por ello se ha adoptado universalmente. Para ms
informacin podemos visitar el sitio web de JSON en http://www.json.org/.
Esto quiere decir que con JSON podemos comunicar datos fcilmente entre scripts Javascript y
scripts PHP. Por ejemplo, pensemos en una validacin de formulario que se desea hacer con
Ajax. Los datos del formulario se pueden enviar a PHP por medio de POST y luego podramos
desde PHP enviar a Javascript el resultado de validar esos datos en el servidor. Como la
validacin puede ser positiva o negativa, as como puede tener ms o menos cdigos de error
y acciones a realizar dependiendo de la informacin procesada, el script PHP tiene que mandar
una respuesta ms o menos elaborada al script Javascript y una posibilidad es enviar esos
datos desde PHP utilizando la notacin JSON.

Disponibilidad de las funciones JSON en PHP


PHP dispone de varias funciones para hacer distintos tratamientos con notacin de objetos
JSON, que permite convertir un objeto PHP, o cualquier otro tipo de variable, a un string con
notacin JSON, as como crear un objeto PHP a partir de un string codificado con JSON.
En PHP, como decamos, es posible producir y consumir datos cargados con notacin JSON, por
medio de unas funciones de las que dispone el lenguaje, que existen de manera
predeterminada en los servidores modernos de PHP y que se pueden utilizar tambin en
instalaciones antiguas de PHP, aunque con algn trabajo de instalacin adicional.
A partir de PHP 5.2 las funciones JSON estn disponibles siempre, pero si utilizamos por
ejemplo PHP 4 tendramos que instalarlas manualmente. Para ello existen varios paquetes de
libreras, que provienen de diversas fuentes, que tienen funciones para tratar con JSON desde
PHP.
- Paquete JSON de PECL
Este paquete, del repositorio de libreras PHP PECL, es compatible con PHP 4.3.0 o superior. En
versiones superiores a PHP 5.2 est disponible por defecto. En versiones anteriores del
lenguaje se tendra que instalar de manera separada.
- Librera JSON-PHP
Es una librera de funciones que se conoce tambin con el nombre de "Services_JSON".
Originariamente escrita por Michal Migurski, en la actualidad se encuentra disponible dentro
del framework PHP PEAR: http://pear.php.net/package/Services_JSON

Manual de Trabajar con JSON desde PHP : http://www.desarrolloweb.com/manuales/php-json.html


Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.

Tu mejor ayuda para aprender a hacer webs


www.desarrolloweb.com

- JSON Lib en Zend Framework


Es una librera de funciones para tratamiento con JSON que forma parte del framework PHP
Zend.
- XML-RPC para PHP
Por medio de una extensin para la librera php-xmlrpc, tambin se puede tratar con notacin
de objetos JSON.
Las particularidades de cada sistema son ligeramente distintas. Cabe decir que la ms
interesante sera la primera, que forma parte de PECL, puesto que est escrita en C y por
tanto ser ms rpida de ejecutarse, al formar parte de los componentes nativos de PHP.
Como decimos slo podremos disponer de ella a partir de PHP 5.2, pero en servidores antiguos
tendramos que instalarla aparte, lo que a menudo ser complicado, o incluso imposible para
sitios web en produccin y en un alojamiento compartido.
As que, si nuestro servidor PHP no dispone de las funciones JSON por estar poco actualizado,
nos costar mucho menos esfuerzo y dolores de cabeza utilizar otra librera distinta a la bsica
de PECL. En este caso, por la facilidad de instalacin, se recomendara la utilizacin de la
librera que viene en PEAR, que se puede descargar del propio sitio de PEAR, en la URL
http://pear.php.net/package/Services_JSON
Nota: Hemos publicado en DesarrolloWeb.com en pasados artculos algunas referencias tiles para instalar
PEAR y utilizar algunos componentes de este framework PHP.este framework PHP.

Existe un artculo muy interesante, aunque en ingls, que compara las diversas libreras
existentes para usar JSON desde PHP, que contiene diversas informaciones tcnicas, requisitos
y un anlisis del desempeo de cada una.
En el prximo artculo explicaremos cmo utilizar las funciones JSON en PHP por medio de las
funciones nativas del lenguaje.
Artculo por Miguel Angel Alvarez

Producir JSON desde PHP


En este artculo vamos a mostrar cmo crear un JSON desde PHP con las funciones nativas del
lenguaje de programacin del lado del servidor. Adems veremos varias particularidades de la
creacin de cadenas de texto con notacin JSON desde PHP, que son importantes de conocer
para no caer en problemas comunes de este tipo de operaciones.
Como ya comentamos en el artculo anterior, en el que presentamos las libreras ms
fundamentales hacer JSON desde PHP, existen diversas formas para implementar
funcionalidades de procesamiento de archivos JSON desde PHP. En concreto en este artculo
vamos a ver las funciones nativas de PHP que sirven para este tema, que se encuentran
disponibles desde la versin de PHP 5.2. Cabe recordar, no obstante, que estas mismas
funciones nativas se pueden instalar por separado, si es que no las tenemos y que existen
otras libreras que tambin ofrecen posibilidades similares.
Veremos entonces cmo producir cadenas con notacin JSON a partir de variables simples,
arrays y objetos PHP.

Manual de Trabajar con JSON desde PHP : http://www.desarrolloweb.com/manuales/php-json.html


Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.

Tu mejor ayuda para aprender a hacer webs


www.desarrolloweb.com

Crear un JSON desde PHP


Para crear una cadena para expresar un objeto u otro tipo de variable con JSON en PHP se
dispone de una funcin llamada json_encode(), que recibe lo que deseamos convertir en
notacin JSON y devuelve una cadena de texto con el JSON producido.
Podemos convertir en JSON cualquier cosa que necesitemos, como una cadena, una variable
numrica, un array -normal o asociativo- y objetos con todo tipo de datos dentro. Veremos
varios ejemplos que ilustrarn este proceso.
$mivariable = "hola";
print_r(json_encode($mivariable));

Esto devuelve:
"hola"

Ahora convertimos un array normal:


$miArray = array(1,4,6,8,3,34.8,9,43);
print_r(json_encode($miArray));

Que devuelve:
[1,4,6,8,3,34.8,9,43]

Estos ejemplos anteriores son sin duda quizs demasiado simples, pero la cosa empieza a
tener sentido cuando se convierte un array asociativo en JSON, como se puede ver a
continuacin.
$miArray = array("manzana"=>"verde", "uva"=>"Morada", "fresa"=>"roja");
print_r(json_encode($miArray));
{"manzana":"verde","uva":"Morada","fresa":"roja"}

Este resultado ya tiene una forma parecida a lo que estamos acostumbrados a ver en JSON.
Podramos fijarnos que la cadena que devuelve no tiene saltos de lnea e identacin de los
elementos, con lo que la lectura se dificulta un poco por seres humanos. No obstante,
podramos utilizar esa cadena para crear una variable Javascript y por supuesto podremos
acceder a cualquier valor del JSON, de una manera parecida a esta:
<script>
JSONFrutas = eval(<?php echo json_encode($miArray);?>);
alert(JSONFrutas.manzana);
</script>

Como se ha visto, para almacenar el JSON en una variable Javascript, sin almacenar la propia
cadena, sino el objeto que representa, tenemos que utilizar la funcin Javascript eval(). Luego
podemos acceder a los componentes del JSON como lo hacemos con cualquier objeto, variable,
operador punto y luego el nombre de la propiedad a acceder.

Crear un objeto con PHP y convertirlo en JSON


Como deca, lo bonito es que desde PHP podemos convertir cualquier objeto que tengamos,
para generar el JSON del mismo y poder enviarlo a Javascript o cualquier otro lenguaje o
componente que necesitemos que lo procese. El mecanismo es exactamente igual, con la
salvedad que primero tenemos que crear una clase, instanciar un objeto y luego convertirlo a
JSON con json_encode().

Manual de Trabajar con JSON desde PHP : http://www.desarrolloweb.com/manuales/php-json.html


Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.

Tu mejor ayuda para aprender a hacer webs


www.desarrolloweb.com

As crearamos una clase e instaciaramos ojetos con ella.


//creo una clase arbol
class NodoArbolDHTML{
var $nombre;
var $url;
var $hijos;
function __construct($nombre,$url){
$this->nombre = $nombre;
$this->url = $url;
}

function anadirHijo($nodoHijo, $nombre){


if (!isset($this->hijos)){
$this->hijos = array();
}
$this->hijos[$nombre] = $nodoHijo;
}

//aadir un hijo

Como se ha visto, se ha implementado una clase NodoArbolDHTML, con la que podramos


crear una estructura de rbol. El rbol tiene distintos nodos y cada uno a su vez tiene un
nombre, una URL y un conjunto que hijos, que tambin son nodos del rbol.
Ahora, podramos instanciar objetos tipo nodo, para crear el rbol, de la siguiente manera.
$raiz = new NodoArbolDHTML("Raiz", "http://www.loquesea.com");
$miNodo = new NodoArbolDHTML("Mi arbolito", "http://www.oi.com");
$raiz->anadirHijo($miNodo, "loquesea");
$miNodo2 = new NodoArbolDHTML("Mi otro nodo", "http://www.as.com");
$raiz->anadirHijo($miNodo, "otro");

Con esto ya tenemos la mayor parte del trabajo creado, porque para producir el JSON
simplemente tenemos que llamar a la funcin json_encode(), que ya hemos visto repetidas
veces:
print_r(json_encode($raiz));

Con esto mostraramos en la pgina la cadena:


{"nombre":"Raiz","url":"http://www.loquesea.com","hijos":{"loqesea":{"nombre":"Mi
arbolito","url":"http://www.oi.com","hijos":null},"otro":{"nombre":"Mi
arbolito","url":"http://www.oi.com","hijos":null}}}
Nota: Las barras de "http://" estn bien escritas, aunque aparezcan como "http://", lo que pasa es que PHP
se les coloca una contrabarra como caracter de escape.

De nuevo la forma como se muestra la cadena no tiene muy fcil lectura, por la falta de saltos
de lnea y los identados. Pero bueno, eso no es problema para Javascript, como podremos ver
en el cdigo siguiente, que ilustra la manera en que podemos utilizar ese JSON para crear
objetos en el cliente.
<?php
$arbol_php = json_encode($raiz);
?>
<script>
var arbolJavascript = eval(<?php echo $arbol_php;?>);
alert(arbolJavascript.hijos.loquesea.nombre);
alert(arbolJavascript.hijos.otro.url);
</script>

Manual de Trabajar con JSON desde PHP : http://www.desarrolloweb.com/manuales/php-json.html


Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.

Tu mejor ayuda para aprender a hacer webs


www.desarrolloweb.com

Escapar caracteres especiales en cadenas JSON


En la notacin JSON se utiliza Unicode como juego de caracteres, por su universalidad. Por
tanto, en Unicode hay determinados caracteres, como pueden ser la ee, letras con acentos,
etc, que tienen que convertirse en sus correspondientes cdigos de escape para que todo
funcione correctamente. Por ejemplo, la letra "" tiene el cdigo "u00f1". En las cadenas que
utilizamos en la notacin JSON se deben colocar entonces caracteres Unicode, excepto las
comillas dobles (que se utilizan para delimitar la cadena y por tanto se debe escapar) y la
barra invertida, que es el carcter de escape.
Afortunadamente, la funcin PHP json_encode() hace la conversin de las cadenas a Unicode
automticamente, por lo que no nos deberamos preocuparnos por este detalle, sin embargo,
PHP toma de manera predeterminada que la cadena de origen est en UTF-8, por lo que, si
trabajamos con archivos en ISO-8859-1, tendremos que convertirlos antes a UTF-8.
Por ejemplo, en mi ejemplo PHP, que tengo en mi ordenador guardado con ISO-8859-1, si
intento crear un JSON de esta manera:
$miArray = array("Pars"=>"Francia", "Madrid"=>"Espaa");
print_r(json_encode($miArray));

Obtengo la siguiente cadena:


{null:"Francia","Madrid":null}

Esto se soluciona, como digo, convirtiendo antes las cadenas a UTF-8, al menos las que tienen
caracteres distintos del alfabeto ingls.
<?php
$miArray = array(utf8_encode("Pars")=>"Francia", "Madrid"=>utf8_encode("Espaa"));
print_r(json_encode($miArray));
?>

Con lo que obtengo la siguiente cadena codificada con JSON:


{"Paru00eds":"Francia","Madrid":"Espau00f1a"}

Con este artculo de desarrolloweb .com ya hemos visto cmo podemos producir cadenas con
notacin JSON a partir de variables, arrays u objetos. Esperamos que haya sido instructivo y
os citamos para el prximo artculo, en el que veremos cmo crear variables u objetos PHP a
partir del contenido de cadenas JSON.
Artculo por Miguel Angel Alvarez

Consumir un JSON desde PHP


PHP puede interpretar datos provenientes de una cadena con notacin JSON, de modo que se
puedan guardar en variables y luego utilizarlas en los scripts del lado del servidor. En este
articulo veremos cmo hacerlo y adems destacaremos una serie de consejos para que los
JSON estn bien formados y consigamos una correcta interpretacin.
Recordemos que existen diversas libreras para que podamos trabajar con cadenas en notacin
JSON, que vimos en el artculo de libreras disponibles en PHP para JSON. Nosotros estamos
utilizando para estos artculos de desarrolloweb.com las funciones nativas de PHP para JSON,
que estn disponibles por defecto desde PHP 5.2.
Primero vamos a mostrar un objeto definido con JSON mediante Javascript, para hacer unas
Manual de Trabajar con JSON desde PHP : http://www.desarrolloweb.com/manuales/php-json.html
Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.

Tu mejor ayuda para aprender a hacer webs


www.desarrolloweb.com

comprobaciones y saber si est bien construido.


<script>
var objJson = {
elemento1: "valor1",
elemento2: 22,
elemento3: null,
masCosas: {
voy: "ya",
vengo: "despues"
}
}
alert(objJson.elemento1)
alert(objJson.masCosas.vengo)
</script>

Este script Javascript, ejecutado en un navegador, nos mostrara dos mensajes de alerta con
valores que se han colocado en el objeto definido con notacin JSON. Esto no tiene nada que
ver con lo que vamos a ver sobre PHP, pero al menos tenemos claro que nuestro JSON es
correcto.
Ahora vamos a crear una variable PHP con la cadena para hacer este objeto y lo cargaremos
en una variable PHP interpretando el JSON. Para ello PHP dispone de una funcin llamada
json_decode() que recibe la cadena con notacin JSON y devuelve un objeto, o cualquier otro
tipo de variable, que estuviera representada en el JSON.
<?php
$str_obj_json = '{
"elemento1": "valor1",
"elemento2": 22,
"elemento3": null,
"masCosas": {
"voy": "ahora",
"vengo": "ya"
}
}';
$obj_php = json_decode($str_obj_json);
?>

Ahora podramos mostrar el contenido de esa variable con la funcin de PHP print_r(), que
muestra el contenido de variables de manera que se pueda entender por un humano.
stdClass Object
(
[elemento1] => valor1
[elemento2] => 22
[elemento3] =>
[masCosas] => stdClass Object
(
[voy] => ahora
[vengo] => ya
)
)

Por ltimo podemos intentar acceder a una de las propiedades de este objeto, de esta manera:
echo "Una propiedad cualquiera:" . $obj_php->elemento1;

Manual de Trabajar con JSON desde PHP : http://www.desarrolloweb.com/manuales/php-json.html


Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.

Tu mejor ayuda para aprender a hacer webs


www.desarrolloweb.com

Consejos para hacer un JSON que se pueda interpretar


correctamente
La funcin json_decode() de PHP requiere unas normas un poco ms estrictas a la hora de
construir un JSON. Si no atendemos esas reglas no obtendremos un mensaje de error, sino
que la funcin devolver un valor nulo: null. Por tanto, algo que Javascript puede interpretar
correctamente puede que no sea as por PHP, as que hay que prestar especial atencin sobre
una serie de puntos.
1) En la cadena JSON, tanto el nombre de una propiedad como el valor deben estar entre
comillas, menos los valores numricos, o palabras como null, que pueden estar sin comillas.
Incorrecto:

$json = json_decode('{nombre: "cualquier valor"}');

Correcto:

$json = json_decode('{"nombre": "cualquier valor"}');

2) Se tienen que utilizar comillas dobles. No se permiten comillas simples para los nombres de
variables y sus valores.
Incorrecto:

$json = json_decode("{'frutas': ['pera', 'uva']}");

Correcto:

$json = json_decode('{"frutas": ["pera", "uva"]}');

3) No podemos dejarnos una coma que despus no tenga nada, as como un corchete o llave
de ms o de menos.
Incorrecto:

$json = json_decode('{"nombre": "valor", }');

Correcto:

$json = json_decode('{"nombre": "valor"}');

4) Tenemos que enviar los datos a json_decode() en UTF-8. Si estamos trabajando en iso8859-1, habra que codificar la cadena en UTF-8 previamente:
Incorrecto:

$json = json_decode('{"maana": "mircoles"}');

Correcto:

$json = json_decode(utf8_encode('{"maana": "mircoles"}'));

Artculo por Miguel Angel Alvarez

Prctica de JSON en PHP con el API de Panoramio


JSON es un formato utilizado para el intercambio de informacin entre sistemas. Utiliza
Javascript como lenguaje y sintaxis para la definicin de objetos, en archivos de texto que son
transferidos fcilmente por Internet. Poco a poco se ha ido incorporando al uso habitual en el
desarrollo web por su facilidad de uso y su integracin en lenguajes de programacin
habituales, como PHP. En este artculo vamos a presentar una prctica con JSON en PHP
basada en el uso del API de Panoramio.
Panoramio es un popular servicio de Google, como probablemente sabremos, que permite
Manual de Trabajar con JSON desde PHP : http://www.desarrolloweb.com/manuales/php-json.html
Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.

Tu mejor ayuda para aprender a hacer webs


www.desarrolloweb.com

subir imgenes localizadas geogrficamente en los mapas de Google. Panoramio dispone de un


API para la integracin de las fotografas de su base de datos en otras aplicaciones web, de
manera que cualquier persona puede presentar fotos de lugares del mundo subidas por los
usuarios de Panoramio, en su propio sitio web.
El API de Panoramio utiliza JSON como formato de intercambio de la informacin de las fotos.
Por medio de este API podemos construir URL, que solicitadas al sitio de Panoramio, nos
devuelven un JSON con los datos de las fotografas, es decir, su ttulo, autor, URL del archivo
grfico, etc. Gracias a la integracin de JSON en la mayora de los lenguajes de programacin
de aplicaciones web, desde casi todas las plataformas de programacin para el desarrollo, se
pueden obtener fcilmente las fotos y presentarlas en un sitio web.
Como venimos explicando en el Manual de Trabajo con JSON en PHP, este lenguaje de
programacin dispone de varias funciones que sirven para consumir archivos JSON y
convertirlos en objetos PHP con los que podemos trabajar. Podemos ver como es de prctico el
JSON al utilizar el API de Panoramio y cmo en pocas lneas de cdigo podemos acceder a
Panoramio y consultar su base de datos de fotografas y mostrarlas en nuestra pgina web.
Referencia: En DesarrolloWeb.com hemos publicado anteriormente un artculo para aprender a consumir
JSON del API de Panoramio con el lenguaje de programacin del lado del cliente JSON: API Panoramio +
ejemplo de JSON con Mootools .

Pasos del script PHP para consultar el API de Panoramio


Para crear un programa en PHP que consulte el API de Panoramio tenemos que realizar varios
pasos:
1. Conectar con una URL de Panoramio, enviando los datos sobre la localizacin desde
donde queremos obtener fotos, para recibir un JSON con los datos de dichas fotos.
2. Procesar el JSON, para obtener un objeto PHP con los datos de las fotografas.
3. Hacer un bucle para recorrer las fotografas del objeto, para mostrar las
fotografas obtenidas en nuestra pgina.
Todos estos pasos son sencillos, pero necesitaremos alguna idea sobre distintas partes de PHP,
pero afortunadamente en Desarrollo web .com tenemos artculos para obtener la base de
conocimientos necesaria para realizar cualquiera de estos pasos.

Conectar con una URL de Panoramio:


Esto lo tenemos que hacer con las funciones de trabajo con archivos de texto que dispone PHP,
pues la lectura de ficheros se hace con las mismas funciones que la lectura de URLs, tal como
explicamos en el artculo Leer ficheros con PHP.
Primero tenemos que crear una URL para la consulta en el API de Panoramio, que tendr una
forma como esta:
http://www.panoramio.com/map/get_panoramas.php?order=popularity&set=full&from=0&to=5&minx=0.35&miny=39.44&maxx=-0.34&maxy=39.46&size=medium

Esto nos devolvera fotos:

por orden de popularidad,


desde la foto encontrada en posicin 0 hasta la posicin 5 de ese ranking por
popularidad,

Manual de Trabajar con JSON desde PHP : http://www.desarrolloweb.com/manuales/php-json.html


Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.

Tu mejor ayuda para aprender a hacer webs


www.desarrolloweb.com

entre unas coordenadas (minx, miny) y (maxx, maxy), o lo que es lo mismo (mnima
longitud y latitud) y (mxima longitud y latitud),
de tamao medio

Las fotos estn indicadas, como se deca, en texto con cdigo Javascript en formato JSON. As
pues, si accedemos a esa URL obtendremos el JSON de respuesta.
Para obtener el texto que devuelve Panoramio al acceder a esa URL tenemos que leerlo con las
funciones de archivos. Utilizaremos una funcin ya explicada en el artculo Leer ficheros con
PHP
function leer_contenido_completo($url){
$fichero_url = fopen ($url, "r");
$texto = "";
while ($trozo = fgets($fichero_url, 1024)){
$texto .= $trozo;
}
return $texto;
}

As pues, con una llamada a esta funcin, enviando la URL que deseamos consultar, podramos
obtener el JSON con las fotos.
$URL_API_PANORAMIO = "http://www.panoramio.com/map/get_panoramas.php?
order=popularity&set=full&from=0&to=5&minx=-0.35&miny=39.44&maxx=-0.34&maxy=39.46&size=medium";
$contenido_url = leer_contenido_completo($URL_API_PANORAMIO);

Procesar el JSON:
Como ya vimos en el artculo Consumir un JSON desde PHP, PHP dispone de la funcin
json_decode() que devuelve un objeto PHP resultante de procesar el JSON enviado como un
string por parmetro. En nuestro ejemplo podramos hacer lo siguiente:
$JSON_PANORAMIO_PHP = json_decode($contenido_url);

En la variable $JSON_PANORAMIO_PHP tendremos el objeto PHP resultante de la


decodificacin del JSON recibido en el contenido de la URL.

Hacer un bucle para recorrer las fotografas del objeto


Ahora nos queda el paso ms sencillo para los que ya tienen cierta experiencia con PHP, hacer
un recorrido de todas las fotos que hayamos recibido. Ese recorrido deber tener en cuenta el
formato del objeto que se recibe en el JSON. Ese objeto tiene los siguientes atributos:

count (con el nmero de fotos encontradas en todo panoramio entre las coordenadas
dadas, que no tiene por qu corresponder con el subconjunto de fotos recibidas.
photos (que es un array con todas las fotos recibidas. Cada foto es otro objeto, que
tiene los datos de esa foto en particular)
has_more (con un boleano que indica si hay o no otras fotos disponibles para este
punto)

Nota: En realidad podemos obtener la informacin completa sobre el formato de este objeto en la propia
documentacin del API de Panoramio.

Manual de Trabajar con JSON desde PHP : http://www.desarrolloweb.com/manuales/php-json.html


Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.

10

Tu mejor ayuda para aprender a hacer webs


www.desarrolloweb.com

Entonces nuestro bucle PHP tiene que hacer un recorrido al array de fotografas que hay en el
atributo "photos" del objeto PHP. Podra tener esta forma:
for ($i=0; $i<count($JSON_PANORAMIO_PHP->photos); $i++){
$foto_actual = $JSON_PANORAMIO_PHP->photos[$i];
echo "<p>";
echo "<img src='" . $foto_actual->photo_file_url . "' width='" . $foto_actual->width . "' height='" . $foto_actual>height . "'>";
echo "<br>";
echo "<small>" . $foto_actual->photo_title . ", por " . $foto_actual->owner_name . "</small>";
echo "</p>";
}

Este recorrido se podra haber hecho de otra forma, pero nos sirve perfectamente un bucle for.
Adems, quizs vosotros colocarais las fotos con otro estilo, para adaptarlas al diseo de
vuestra pgina.
Si se desea, podemos ver las fotos de Panoramio que hay en esa localizacin, que corresponde
con la Ciudad de las Ciencias y las Artes de Valencia.

Cdigo PHP completo


A continuacin para una referencia ms completa, podemos ver el cdigo completo de la
pgina PHP que hemos creado para hacer este ejemplo de trabajo con JSON en PHP.
<html>
<head>
<title>Consumir JSON del API de Panoramio desde PHP</title>
</head>
<body>
<?
function leer_contenido_completo($url){
$fichero_url = fopen ($url, "r");
$texto = "";
while ($trozo = fgets($fichero_url, 1024)){
$texto .= $trozo;
}
return $texto;
}
$URL_API_PANORAMIO = "http://www.panoramio.com/map/get_panoramas.php?
order=popularity&set=full&from=0&to=5&minx=-0.35&miny=39.44&maxx=-0.34&maxy=39.46&size=medium";
$contenido_url = leer_contenido_completo($URL_API_PANORAMIO);
echo $contenido_url;
$JSON_PANORAMIO_PHP = json_decode($contenido_url);
echo "<hr>";
//echo $JSON_PANORAMIO_PHP->count; //esto muestra el nmero de fotos totales que existen en Panoramio en esa
localizacin
for ($i=0; $i<count($JSON_PANORAMIO_PHP->photos); $i++){
$foto_actual = $JSON_PANORAMIO_PHP->photos[$i];
echo "<p>";
echo "<img src='" . $foto_actual->photo_file_url . "' width='" . $foto_actual->width . "' height='" . $foto_actual>height . "'>";
echo "<br>";
Manual de Trabajar con JSON desde PHP : http://www.desarrolloweb.com/manuales/php-json.html
Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.

11

Tu mejor ayuda para aprender a hacer webs


www.desarrolloweb.com

echo "<small>" . $foto_actual->photo_title . ", por " . $foto_actual->owner_name . "</small>";


echo "</p>";

}
?>
</body>
</html>

Podemos ver el script en marcha en una pgina aparte.


Artculo por Miguel Angel Alvarez

Manual de Trabajar con JSON desde PHP : http://www.desarrolloweb.com/manuales/php-json.html


Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.

12

Vous aimerez peut-être aussi