JSON con PHP

JSON es un formato de intercambio de información muy practico pues se puede compartir datos como si fueran objetos, originalmente pensado para usarse con Javascript hoy veremos la forma de utilizarlo con PHP.

json-php

Como utilizar JSON con PHP
Si estamos utilizando PHP4 necesitaremos una clase que encargue de codificar/decodificar los datos en formato JSON. Para ello descargamos la clase JSON.php. Luego de ello la incluimos en nuestro archivo y la inicializamos llamando a Services_JSON para luego decodificar los datos con el método decode.

[php]
require_once(“JSON.php”);
$json = new Services_JSON;
$obj = $json->decode($data)
[/php]

Ejemplo de uso
Para desarrollar nuestro ejemplo, obtendremos los datos de Google AJAX Search API, el cual es un servicio que nos utilizar los resultados de búsqueda de Google y devuelve los datos en JSON. Para ello si deseamos obtener los datos de la búsqueda de la palabra ‘Google’ podremos acceder a http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Google, el cual devolverá los resultados en el siguiente formato:

  1. {"responseData":
  2. { "results": [
  3.   {
  4.    "GsearchResultClass": "GwebSearch",
  5.    "unescapedUrl": "http://en.wikipedia.org/wiki/Paris_Hilton",
  6.    "url": "http://en.wikipedia.org/wiki/Paris_Hilton",
  7.    "visibleUrl": "en.wikipedia.org",
  8.    "cacheUrl": "http://www.google.com/search?...",
  9.    "title": "\u003cb\u003eParis Hilton\u003c/b\u003e",
  10.    "titleNoFormatting": "Paris Hilton",
  11.    "content": "In 2006, she released her debut..."
  12.   },
  13.   {
  14.    "GsearchResultClass": "GwebSearch",
  15.    "unescapedUrl": "http://www.imdb.com/name/nm0385296/",
  16.    "url": "http://www.imdb.com/name/nm0385296/",
  17.    "visibleUrl": "www.imdb.com",
  18.    "cacheUrl": "http://www.google.com/search?...",
  19.    "title": "\u003cb\u003eParis Hilton\u003c/b\u003e",
  20.    "titleNoFormatting": "Paris Hilton",
  21.    "content": "Self: Zoolander. Socialite..."
  22.   },
  23.   ...
  24.  ],
  25.  "cursor": {
  26.   "pages": [
  27.    { "start": "0", "label": 1 },
  28.    { "start": "4", "label": 2 },
  29.    { "start": "8", "label": 3 },
  30.    { "start": "12","label": 4 }
  31.   ],
  32.   "estimatedResultCount": "59600000",
  33.   "currentPageIndex": 0,
  34.   "moreResultsUrl": "http://www.google.com/search?..."
  35.  }
  36. }, 200, null)
  37. }

Como pueden ver, toda la información esta estructurada como un objeto con lo cual es muy sencillo de acceder a todos los elementos como veremos a continuación.

Ahora el siguiente paso es obtener los datos de la ruta indicada y decodificarlas para posteriormente mostrarlas en nuestro HTML. Nótese que para hacer uso de este servicio es necesario tener un key, el cual es gratuito y lo pueden obtener en Sign-up for an AJAX Search API Key.

[php]
require_once(“JSON.php”);
// read data
$aQue = “Google”;
$aKey = “TU_API_KEY”;
$aUrl = “http://ajax.googleapis.com/ajax/services/search/web”;
if (isset($_GET[‘q’])){
$aQue = urlencode($_GET[‘q’]);
}
$data = file_get_contents($aUrl.”?v=1.0&key=”.$aKey.”&q=”.$aQue);
// decode data
$json = new Services_JSON;
$obj = $json->decode($data);
[/php]

Hasta este punto tenemos los datos en la variable $obj, luego en el cuerpo de nuestro html hacemos un recorrido por cada elemento de los resultados. Como se puede ver en el siguiente código se accede a los elementos como objetos de manera sencilla.

[php]
$results = $obj->responseData->results;
for ($i=0; $iurl.”\”>”.$tmp->title.”“;
$tmpHTML.= “
“.$tmp->content.”
“;
$tmpHTML.= ““.$tmp->url.”

“;
}
echo $tmpHTML;
[/php]

Podemos mejorar nuestro ejemplo si le agregamos una caja de texto para que ingrese su búsqueda y además de una hoja de estilos para que se vean mejor los resultados, con lo cual obtenemos /json/php.php.

Comentarios Total 11 comentarios


caos30
Publicado: 14/06/2009 11:41 pm

Para variar… excelente artículo!
Si me permites, comentar que a partir de PHP version 5.2 la codificación y decodificación de JSON ya no necesita de usar una clase como la de JSON.php que tú muy bien explicas, sino que el PHP trae dos funciones nativas que lo hacen:

json_encode($data);
json_decode($data);

Se puede leer más aquí:
http://www.php.net/manual/es/function.json-decode.php

Un saludo,
SERGI

Jorge
Publicado: 02/07/2009 11:38 am

hola alguien me podria recomendar u hosting gratis que soporte esto y lo de sprytube?

Ranking Delicious con PHP » unijimpe
Publicado: 15/07/2009 11:06 pm

[…] Obteniendo la información Entonces primero creamos el URL de la consulta y luego leemos los datos haciendo uso de la función file_get_contents. Como esta información es devuelta en formato JSON utilizaremos la librería JSON.php de la cual comentamos en JSON con PHP. […]

Acortar URLs con bit.ly y PHP » unijimpe
Publicado: 20/07/2009 12:09 am

[…] podemos utilizar la librería JSON.php de la cual hemos comentado en JSON con PHP, entonces crearemos una función llamada getShortenURL que recibirá el URL y lo […]

Carluis Pérez
Publicado: 29/05/2010 6:36 pm

bueno me ha interesado mucho este artículo y quisiera hacer una paginacion de los resultados de busqueda pero necesitaria una ayudita en este tema.

unijimpe
Publicado: 29/05/2010 7:09 pm

Para hacer la paginación de resultados en este ejemplo puedes fijarte en el JSON devuelto, hay una parte que muestra los datos para la paginación:

"cursor": {
"pages": [
{ "start": "0", "label": 1 },
{ "start": "4", "label": 2 },
{ "start": "8", "label": 3 },
{ "start": "12","label": 4 }
],

Estos datos los puedes utilizar para hacer la paginación de resultados. En nuestro ejemplo hemos llamado a la primera página de resultados con el siguiente URL:

http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Google

Para para paginación de resultados puedes utilizar:

Página #1:
http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Google&start=0
Página #2:
http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Google&start=4
Página #3:
http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Google&start=8

Como puedes ver solo tienes que llamar a esas URLs para obtener los datos de las siguientes páginas. Lo que haría falta es crear los botones para llamar a esas URLs.

Carluis Pérez
Publicado: 29/05/2010 8:43 pm

pude programar algo como esto: $contents = file_get_contents($apiUrl.”?v=1.0&key=”.$apiKey.”&q=”.$apiQue.”&start=”.$apipag);

he añadido: $apipag

Carluis Pérez
Publicado: 29/05/2010 9:39 pm

pero tengo algunos problemas con los botones


[…] son devueltos en formato JSON, utilizaremos la librería JSON.php de la cual hemos comentado en JSON con PHP. Entonces crearemos un script para mostrar la equivalencia entre el Dolares Americanos (USD) y […]

Diego C
Publicado: 23/04/2012 1:53 pm

Hola, en primer lugar quisiera felicitarte por tu sitio y por esta explicación sobre JSON.
Pero quisiera saber si es posible pasar el contenido que se encuentra en la variable PHP:
$obj = $json->decode($data);

Dentro de una variable Javascript para usarla en otras funciones para mi página.

No sé cómo poder hacer esto. Agradezco tu respuesta.

Leer JSON desde php
Publicado: 25/06/2012 8:27 am

[…] http://blog.unijimpe.net/json-con-php/ […]

 

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>)