Blog

Leer información en formato JSON

Apr 27, 2009 | Español | By Crysfel | 16 Comments | Read in English

El tema de hoy muestro como poder manipular información en formato JSON mediante un Store y por medio de Ajax será solicitada al servidor para ser procesada localmente.

Leer información en formato JSON
Author: Crysfel

I'm a software developer with 6+ years of experience, when I'm not developing software I may be writing a tutorial, you can follow me on twitter

Material de apoyo

El ejercicio que haremos en este tutorial será igual a los dos tutoriales anteriores, únicamente cambiaremos la fuente de datos, así que vamos a descargar el material de apoyo, lo descomprimimos y copiamos los archivos dentro de la carpeta “ajax” que creamos al inicio de este capitulo.

La información

La información que vamos a utilizar está contenida en formato JSON de la siguiente manera:

<?php
	header("Content-Type: text/plain"); 

	echo "{
		total:9,
		data:[{
			id: 1,
			name: 'Crysfel',
			occupation: 'Software developer',
			gender: 'm',
			age: 25
		},{
			id: 2,
			name: 'Sasha',
			occupation: 'Figure skater',
			gender: 'f',
			age: 24
		},{
			id: 3,
			name: 'Jack',
			occupation: 'Software Architect',
			gender: 'm',
			age: 35
		},{
			id: 4,
			name: 'John',
			occupation: 'Javascript developer',
			gender: 'm',
			age: 22
		},{
			id: 5,
			name: 'Sara',
			occupation: 'Designer',
			gender: 'f',
			age: 31
		},{
			id: 6,
			name: 'Nicole',
			occupation: 'Tester',
			gender: 'f',
			age: 31
		},{
			id: 7,
			name: 'Carl',
			occupation: 'Photographer',
			gender: 'm',
			age: 45
		},{
			id: 8,
			name: 'Will',
			occupation: 'Actor',
			gender: 'm',
			age: 32
		},{
			id: 9,
			name: 'Penny',
			occupation: 'Waitress',
			gender: 'f',
			age: 28
		}]
	}";
?>

Este código se encuentra en el archivo “jsondata.php” que viene en el material de apoyo, es importante mencionar que por cuestiones de simplicidad la información está escrita directamente en el código, pero en el mundo real vendría de una base de datos, un servicio Web o algún otro lugar.

Creando el Store

Podemos crear un Store que pueda manipular la información en formato JSON de dos maneras, una es haciendo lo mismo que el tutorial anterior únicamente cambiando el “reader” de XML por uno que lea JSON y definirle la propiedad “root” que es donde se encuentran los registros.

//create the "Person" record
var Person = Ext.data.Record.create([
	{name: 'name', mapping: 'name'},// "mapping" property not needed if it is the same as "name"
	{name: 'occupation'}, // This field will use "occupation" as the mapping.
	{name: 'age', type:'float'}, // this field will use "age" as the mapping and its a float type
	{name: 'gender'}
]);

//creates the reader for the JSON data
var reader = new Ext.data.JsonReader({
totalProperty: 'total', // The element which contains the total dataset size (optional)
   	root: 'data',        // The repeated element which contains row information
	id: 'id'                 // The element within the row that provides an ID for the record (optional)
}, Person);

//creates the proxy
var proxy = new Ext.data.HttpProxy({
	method:'POST', //configure the http method GET or POST
	url: 'jsondata.php' //the URL for the ajax call
}); 

//creates the Ext.data.Store
this.store = new Ext.data.Store({
	proxy: proxy, //setting the proxy
	reader: reader //setting the reader
});

Como puedes ver, el código es muy semejante al ejemplo que vimos con XML en el tema anterior, solo han cambiado unas pocas líneas.

La segunda alternativa es utilizar el objeto “JsonStore”, el cual ya tiene incluido un lector para JSON así como un Proxy para realizar las peticiones Ajax al servidor, utilizando este método podemos ahorrarnos muchas líneas de código reemplazando todo el código anterior por lo siguiente:

this.store = new Ext.data.JsonStore({
	url: 'jsondata.php',
	root: 'data',
	fields: ['name','occupation','gender',{name:'age',type:'float'}]
});

La propiedad “url” es donde se solicitará la información mediante Ajax, la propiedad “root” es donde se encuentran los registros que se utilizarán para este store y la propiedad “fields” es un arreglo donde especificamos los campos de los registros que recibiremos, esto lo hacemos únicamente definiendo el nombre de la propiedad o bien utilizando un objeto donde podemos definir el nombre, el mapping o el tipo de información que tendrá esa propiedad.

El resto del código

El resto del código lo he explicado en los temas anteriores, básicamente lo único que hacemos es agregar un “listener” al evento clic de los botones que se encuentra en el documento HTML para luego filtrar los registros por los criterios necesarios.

Conclusiones

El formato JSON es muy sencillo de manipular, pues crear un store para este formato de información no es complicado y lo hacemos en unas cuantas líneas de código.

Si has notado, el Store es un componente muy importante del Framework, además de que ha sido planeado para soportar diferentes formatos de información. En lo que resta del curso vamos a estar utilizando este componente en los formularios, las grillas, los árboles y varios componentes más que requieran manipular información.

Como siempre son bienvenidos los comentarios, sugerencias o dudas, y no olvides suscribirte a las Feeds o a tu correo para estar al tanto de las actualizaciones.

16 Responses to “Leer información en formato JSON”

  • DrMartin Jun 04, 2009

    He buscado como enfermo un ejemplo de este tipo pero utilizando tecnología JSP, en vez de PHP, aun sigo en la busqueda, quedaría infinitamente agradecido si me pasas algo al respecto.
    Por cierto que buen sitio.

    Saludos.

    • Crysfel Jun 05, 2009

      Te recomiendo registrarte en los foros para que te ayudemos. saludos :D

  • DrMartin Jun 07, 2009

    Ya postee mi duda en el foro y nadie responde, solo necesito cambiar el archivo PHP por un que sea JSP, pero no funciona!!… ayuda!! por favor!!

    • Francisco Oct 08, 2009

      Cual es tu problema exactamente con el JSP?

  • xander Jul 25, 2009

    tengo problemas con al usa php con extjs al descargar los ejemplos no me muestra la informacion que brinda elarchivo .php si no que lo muestra como si fuera un archivo de texto cualkiera. falta configurar algo en el php.ini o algo asi??
    aver si me pueden ayudar por favor

  • Nod Kopfnickend Nov 23, 2009

    Hola crysfel tengo una duda, ya has explicado como cargar datos desde un xml ahora desde un json pero no se puede cargar directamente vía ajax y con el formato de array, así no gastar tanto ancho de banda?

    Tal vez lo que digo es una locura o tal vez no?

    • Crysfel Nov 23, 2009

      Te refieres a utilizar “Ext.Ajax.request”, recibir un arreglo JS y luego darselo al store mediante “loadData”? en teoría si es posible pero realmente utilizar JSON es practicamente lo mismo, no veo la necesidad de hacerlo.
      Saludos

  • Danae Dec 30, 2009

    Hola quiero saber como hacer para llenar un arbol usando json que viene de un php como este

    saludos

  • Pablo Jan 30, 2010

    Hola Crysfel!
    La verdad es que me estoy haciendo fanático de ExtsJs, y de quizzpot.com en la medida en que voy conociendo a ambos.
    Sobre este tutorial, me ha quedado una duda y es que no tengo claro el uso de la propiedad “root”. Entiendo que es el elemento que contiene los registros que se han de procesar, pero no me queda claro que debe ser.
    Saludos y gracias!! Sigue así!

  • Ingenio DS Apr 05, 2010

    Tengo una duda, yo traigo los datos de una consulta en PHP o JSP es igual para mi, mi duda cae en el siguiente punto:

    digamos que el JSON me devuelve algo como:

    {
    id: 1,
    name: ‘Crysfel’,
    occupation: ‘Software developer’,
    gender: ‘m’,
    age: 25
    }

    como hago para acceder al campo age?

    osea no hay una forma como
    JSonReader.dataField(“”);
    o algo asi

    • Crysfel Apr 05, 2010

      Primero necesitas sacar el record que del store, puedes usar un “store.getAt” o hacer alguna búqueda, luego ya que tienes el record solamente haces un “rec.get(‘age’)”.

      Saludos

  • togarha Apr 19, 2010

    Buenas,

    Estoy intentando conectar con la API de google Gears de geolocalización. El ejemplo de la api esta aqui:
    http://code.google.com/intl/es-ES/apis/gears/geolocation_network_protocol.html

    Yo quiero implementar el cliente, y que mediante un documento de texto, pueda cambiar el valor de los “cell_id” y me de la localización, el problema es que no consigo que me funcione nada :(

    Gracias de antemano…

  • tierrarara May 20, 2010

    Como le digo al proxy que la no agregue el parametro “_dc”
    cuando realiza la solicitud ?

  • kathkath Jun 19, 2010

    store.getAt(index).get(‘field_name’) doesn’t work… any way to access fields from jsonstore?

    Thanks a lot

  • Anabel Jul 02, 2010

    Hola que tal, mi duda es que tengo un js hibrido en el cual mezclo un grid, campos de texto, etc. y todo bajo un mismo Form Panel, mi duda es que estamos obteniendo los datos de base de datos a traves de los campos de texto empleando un JsonReader usando la propiedad mapping, ejemplo:
    var reader = new Ext.data.JsonReader({
    root: ‘data’,
    fields: [
    {name: 'dataNombreAfiliado',mapping:'dataNombreAfiliado',type:'string'}]
    });

    el problema es que tenemos diferentes metodos para poder jalar los datos de la bd al js pero nos percatamos que solo podemnos jalar un metodo por formPanel es decir:
    var forma = new Ext.FormPanel({

    reader:reader
    });
    forma.load({url:urlMetDatosAfiliado,waitMsg:’loading….’});

    Como podriamos mandar a traer diferentes metodos a nuestro js en un mismo formPanel. Muchas gracias y espero alguien pueda solucionar este problema…

Leave a Reply







Updates

RSS

Subscribe to our feeds to receive updates of our newest posts and free tutorials.

Site search

Maybe we have what you need, would you like to search first?

Donations

Would you buy me a cup of coffee? I am sharing my knowledge and time with you, help this project grow. Thank you!