Laboratorio 12: JSON

Objetivos

Durante esta práctica, los alumnos serán capaces de:

Esta actividad promueve las siguientes habilidades, valores y actitudes: análisis y síntesis, capacidad de resolver problemas, creatividad, y uso eficiente de la informática y las telecomunicaciones.

Introducción

JSON (JavaScript Object Notation) es un formato textual para el intercambio de información. Su uso resulta particularmente útil al momento de enviar y recibir datos compuestos vía llamadas de Ajax.

Revisa alguna de las siguientes ligas para conocer de manera general dicha notación:

Usando JSON desde Python

Baja el siguiente archivo: json-py-3_4.zip, descomprímelo y copia el archivo json.py a algún directorio del PATH de Pyhton (por ejemplo c:\Python25\lib). Para conocer el PATH de Python, teclea lo siguiente desde el shell de Python:

>>> import sys
>>> sys.path

Revisa que JSON haya quedado correctamente instalado en Python:

>>> import json

Para convertir un dato de Python a JSON, se debe usar la función write. La operación inversa se llama read. La conversión sólo se puede llevar a cabo con los siguientes tipos de datos de Python: diccionarios, strings, listas, enteros, flotantes, booleanos y None. Ejemplo:

>>> x = {'nombre':'Juan', 'edad':21, 'sueldo':6500.5, 'casado':False, 
'novias':['Lolita', 'Conchita', 'Lupita']}
>>> j = json.write(x)
>>> j
'{"edad":21,"nombre":"Juan","sueldo":6500.500000,"casado":false,
"novias":["Lolita","Conchita","Lupita"]}'
>>> json.read(j)
{'edad': 21, 'nombre': 'Juan', 'sueldo': 6500.5, 'casado': False, 
'novias': ['Lolita', 'Conchita', 'Lupita']}

Usando JSON desde JavaScript

El framework de Prototype provee de soporte para JSON. El método Object.toJSON convierte un objeto a su correspondiente notación en JSON. El método evalJSON de un objeto de tipo string realiza la operación inversa.

Por ejemplo, desde una página que ya haya cargado prototype.js y usando Firebug:

>>> x = {nombre:'Juan', edad:21, sueldo:6500.5, casado:false,
novias:['Lolita', 'Conchita', 'Lupita']}
Object nombre=Juan edad=21 sueldo=6500.5 casado=false
>>> j = Object.toJSON(x)
"{"nombre": "Juan", "edad": 21, "sueldo": 6500.5, "casado": false, 
"novias": ["Lolita", "Conchita", "Lupita"]}"
>>> j.evalJSON()
Object nombre=Juan edad=21 sueldo=6500.5 casado=false

Descripción

Esta práctica puede ser elaborada de manera individual o en parejas.

Crea y configura un proyecto de Django llamado numeritos. Al acceder a la página http://localhost:8000/index.html debe aparecer un formulario parecido al siguiente:

Formulario que utiliza Ajax y JSON

El usuario coloca un número en el campo correspondiente y presiona el botón Enviar. Haciendo una sola llamada de Ajax (usando un objeto Ajax.Request de Prototype), el servidor responde con el texto correspondiente a un objeto JSON con tres propiedades sobre el número de entrada (si es perfecto, si es primo, y cuales son sus factores primos). Es importante que el encabezado Content-Type de la respuesta sea application/json. Los lugares de la página marcados con respuesta deben ser actualizados al estilo Ajax (sin necesidad de recargar la página completa).

NOTA 1: Un número es perfecto si es igual a la suma de todos sus divisores, excluyéndose a sí mismo. Por ejemplo, 6 es perfecto ya que 6 = 1 + 2 + 3.

NOTA 2: Los factores primos de un número N son todos los números primos que son divisibles entre N. Si se multiplican todos esos números entre sí el resultado debe dar N. Por ejemplo, los factores primos de 96 son 2, 2, 2, 2, 2 y 3.

Ejemplo

Si el número de entrada es 666, su salida correspondiente debe ser:

¿Qué se debe entregar?

Sigue las siguientes indicaciones para entregar tu práctica:

Evaluación

Esta práctica será evaluada usando los siguientes criterios:

100 La práctica cumple con todos los requerimientos.
60-90 La práctica funciona en general, pero contiene uno o varios errores menores.
50 Proyecto Web produce un error a tiempo de ejecución.
DA La solución es un plagio.
© 1996-2008 por Ariel Ortiz Ramírez (ariel.ortiz@itesm.mx)
ArielOrtiz.com | Desarrollado en Django | Licencia de Creative Commons | XHTML válido | CSS válido