¿Qué es JSON?
JSON (JavaScript Object Notation)
es un formato para el intercambios de datos, básicamente JSON describe
los datos con una sintaxis dedicada que se usa para identificar y
gestionar los datos. JSON nació como una alternativa a XML, el fácil uso en javascript
ha generado un gran numero de seguidores de esta alternativa. Una de
las mayores ventajas que tiene el uso de JSON es que puede ser leído por
cualquier lenguaje de programación. Por lo tanto, puede ser usado para el intercambio de información entre distintas tecnologías.
- En JSON se utiliza la sintaxis nombre/valor, separados por dos puntos. "Manzanas": 20
- Los tipos de valores a usar son string, numérico (int, float) , boolean, array [], objeto {} y null.
- Un objeto JSON se identifica entre llaves: { "NombreFruta":"Manzana" , "Cantidad":20 }
- Se pueden usar arrays, entre corchetes []
{ "Frutas": [ { "NombreFruta":"Manzana" , "cantidad":10 }, { "NombreFruta":"Pera" , "cantidad":20 }, { "NombreFruta":"Naranja" , "cantidad":30 } ] }
- Por poner un ejemplo, tenemos un JSON formado por un array de dos elementos, los cuales a su vez son objetos, que a su vez son arrays de tres elementos
{"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} ] } ] }
- Para, por ejemplo, acceder a la cantidad de manzanas que tenemos, tengo que acceder al elemento 0 de "Frutería", y dentro de él al elemento 0 de "Fruta" y recuperar el valor de la etiqueta "Cantidad".
- Con algo así: json['Fruteria'][0]['Fruta'][0]['Cantidad']
Trabajando con JSON
Formateando un diccionario como JSON
# coding: utf-8 import json data = {"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} ] } ]} #Nos imprime en pantalla data como un tipo de dato nativo. print 'DATA:', str(data) #Nos devuelve el String con el JSON data_string = json.dumps(data) # --> Analiza el dato como JSON print 'JSON:', data_stringEl resultado está codificado como UTF-8. Para decodificarlo como UNICODE, añadir:
decoded = json.loads(data_string) print 'DECODIFICADO:', decodedEl elemento original data, el codificado como JSON y el vuelto a decodificar no son iguales. Añade el código siguiente y cambia, data por data_string y por decoded. Analiza y piensa en lo que has obtenido.
tab = "-" * 3
for clave, elemento in data.items():
# --> elemento es un diccionario, luego la clave es Fruteria, y elemento es el resto
print tab,clave
# print elemento # -> Imprimiría una lista de DOS elementos
tab += tab
for i in elemento: # -> recuerda, elemento es una lista. Tiene dos elementos diccionarios
for clave, j in i.items():
print tab, clave # --> Saca las claves, "Fruta" y "verdura
# print j # -> Imprimiría dos listas
for k in j:
# --> print k, cada "k" es un diccionario
for clave, l in k.items():
print tab,tab,clave, ": ", l
De hecho, al escribir nosotros la variable data, hemos creado un objeto JSON, compuesto por diccionarios y listas anidados. Al usar la orden json.dumps(), el objeto data_string es codificado como una simple cadena de texto, y tratada como tal. Al volver a decodificarla , la vuelve a convertir a objeto.¿Qué importancia tiene? Pues que al guardar un objeto JSON en un fichero lo tenemos que hacer como texto... Y al revés, al recuperarlo lo tengo que extraer como texto y convertirlo a objeto.
Guardar objeto JSON
# coding: utf-8 import json data = {"Frutería": [ {"Fruta": [ {"Nombre":"Sandía","Cantidad":10}, {"Nombre":"Pera","Cantidad":20}, {"Nombre":"Naranja","Cantidad":30} ] }, {"Verdura": [ {"Nombre":"Lechuga","Cantidad":80}, {"Nombre":"Tomate","Cantidad":15}, {"Nombre":"Pepino","Cantidad":50} ] } ]} data_string = json.dumps(data, ensure_ascii=False) # --> Ensure ascci False ASEGURA guardar en UTF-8 archivo = open("fruteria.txt","w") archivo.write(data_string.encode("utf-8")) # --> Ensure ascci False ASEGURA guardar en UTF-8 JUNTO CON codificar en UTF-8 archivo.close()
Recuperar objeto JSON
# coding: utf-8 import json archivo = open("fruteria.txt","r") data_string = archivo.read() archivo.close() # --> Obtenido como cadena de texto print data_string data = json.loads(data_string) tab = "-" * 3 for clave, elemento in data.items(): # --> elemento es un diccionario, luego la clave es Fruteria, y elemento es el resto print tab,clave # print elemento # -> Imprimiría una lista de DOS elementos tab += tab for i in elemento: # -> recuerda, elemento es una lista. Tiene dos elementos diccionarios for clave, j in i.items(): print tab, clave # --> Saca las claves, "Fruta" y "verdura # print j # -> Imprimiría dos listas for k in j: # --> print k, cada "k" es un diccionario for clave, l in k.items(): print tab,tab,clave, ": ", l
= = =
Cómo presentar los datos de un objeto JSON pasado a cadena de texto
# coding: utf-8 import json data = {"Frutería": [ {"Fruta": [ {"Nombre":"Sandía","Cantidad":10}, {"Nombre":"Pera","Cantidad":20}, {"Nombre":"Naranja","Cantidad":30} ] }, {"Verdura": [ {"Nombre":"Lechuga","Cantidad":80}, {"Nombre":"Tomate","Cantidad":15}, {"Nombre":"Pepino","Cantidad":50} ] } ]} desordenado = json.dumps(data) ordenado = json.dumps(data, sort_keys=True) # --> Ordena por índices: Cantidad primero, nombre después, pero no por valores. ordenado2 = json.dumps(data, sort_keys=True, indent=1) # --> Los presenta de una forma más legible. compacto = json.dumps(data, separators=(',',':')) #-> quita los espacios. Ahorra bytes en los ficheros. print 'JSON:', desordenado,"\n" print 'SORT:', ordenado,"\n" print 'SORT2:', ordenado2,"\n" print 'COMPACTO:', compacto,"\n" print 'UNSORTED MATCH:', desordenado == ordenado print 'SORTED MATCH :', ordenado == ordenado2
= = =
¿Qué es MySQL?
MySQL
es un gestor de bases de datos relacionales muy usado por páginas web
en todo el mundo para gestionar sus datos, desde la misma Wikipedia,
hasta Facebook y Youtube.
Su uso suele ser online, y se encuentra
asociado al desarrollo de lenguajes de progrmación en el lado del
servidor como PHP. MySQL funciona bajo varias plataformas, aunque
nosotros la solemos utilizar en Linux. Por ejemplo, el servidor donde
está alojado nuestra plataforma Moodle utiliza P.H.P. 5.5.9, MySQL
5.5.47 y Apache 2.4.7 como servidor de páginas web.
Su potencia y rapidez, sobre todo en la
lectura de datos, lo convierte en un gestor rápido adecuado para
Internet. También su uso es fácil, no demasiado complejo de aprender. Se
reduce al estudio de secuencias SQL.
= = =
Instalando MySQL (y el servidor Apache y PHP en LINUX)
- Usando tasksel: http://www.digitalika.com/2013/08/tasksel-instala-facilmente-su-servidor-de-web-lamp-en-ubuntu/
- Con comandos desde el terminal: https://styde.net/como-instalar-lamp-en-ubuntu-linux/
- Una guía general: http://www.ite.educacion.es/formacion/materiales/85/cd/linux/m3/index.html
- Instalando PHPMYADMIN (para visualizar bases de datos MySQL): http://www.alvarolara.com/2013/06/14/instalar-apache-php-mysql-y-phpmyadmin-en-ubuntu/
Manejo de MySQL
= = =
MySQL y Python
Callejero de madrid
Utilidad. Determinar la codificación de un fichero y cambiarla.
Python
es capaz de manejar datos en MySQL. Para ello, antes de empezar,
instala (si no lo tienes) la librería estándar de python para manejar
bases de datos mysql.
sudo apt-get install python-mysqldb
Acceso a una base de datos MySQL en mi propio equipo (localhost)
Escribe el siguiente código. Para ello tendrás que instalar antes la base de datos callejero_madrid e importar los datos de la tabla callejero: descarga el fichero callejero_madrid.sql,
crear en Phpmyadmin una base de datos llamada callejero_madrid y dentro
de ella, usando la utilidad IMPORTAR, recuperar los datos.
# coding: utf-8 import MySQLdb # datos IMPRESCINDIBLES de conexión DB_HOST = 'localhost' # -> servidor DB_USER = 'root' # -> usuario administrador o con permisos GRANT DB_PASS = 'mipassword' # -> contraseña de usuario DB_NAME = 'callejero_madrid' # -> Nombre de la base de datos # Función que conecta y ejecuta una consulta def run_query(query=''): datos = [DB_HOST, DB_USER, DB_PASS, DB_NAME] conn = MySQLdb.connect(*datos,charset='utf8') # Conectar a la base de datos, con el juego de caracteres UTF-8 cursor = conn.cursor() # Crear un cursor cursor.execute(query) # Ejecutar una consulta if query.upper().startswith('SELECT'): data = cursor.fetchall() # Traer los resultados de un select else: conn.commit() # Hacer efectiva la escritura de datos data = None cursor.close() # Cerrar el cursor conn.close() # Cerrar la conexión return data # programa principal datos = run_query("SELECT Literal from callejero LIMIT 100") # -> Nombre de una tabla de la base de datos. # print datos for i in datos: print i[0]
Pero usando SQL no sólo se pueden leer datos...
También se pueden insertar... En el programa principal modifica por
# programa principal insertar = "INSERT INTO `callejero_madrid`.`callejero` (`Codigo de via`, `Clase de la via`, `Particula de la via`, `Nombre de la via`, `Estado de la via`, `Tipo de denominacion de la via`, `Distritos atravesados (sólo vias historicas)`, `Literal`, `Fecha del alta de la denominacion de via`, `Fecha del baja de la denominación de via`) VALUES ('127 ', 'CALLE', '', 'Inventada por mí', 'Vigente', 'Pleno', '', 'Calle Inventada por mí', '2015-11-11', '')" run_query(insertar)
O se puede seleccionar un registro por un determinado criterio de búsqueda...
# programa principal buscar = "SELECT * FROM `callejero` WHERE `Nombre de la via` LIKE '%Marañón%' " datos = run_query(buscar) for i in datos: print i[4]
Para saber más lee la siguiente página: http://librosweb.es/libro/python/capitulo_12/conectarse_a_la_base_de_datos_y_ejecutar_consultas.html
El resto del tutorial entraría en el apasionante pero difícil tema de hacer páginas web con Python. Yo recomendaría previamente el estudio de tecnologías como HTML, CSS, PHP, Javascript y JQuery.
No hay comentarios:
Publicar un comentario