Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre uno de los tipos de intercambio de datos.

Anuncios

Como una breve introduccion podemos decir que al hoy de hoy es muy raro que los programas o aplicaciones trabajen con un solo lenguaje, en la practica nosotros podemos tener un front end de un determinado lenguaje, por ejemplo Web, pero en el back end que hace toda la magia podemos utilizar python para la busqueda de datos, por ejemplo una base de datos, pero para poder intercambiar esta informacion debemos utilizar alguna de las siguientes interfaces pensadas para eso:

  • JSON
  • XML
  • YAML
Anuncios

Estas estan pensadas para enviar informacion entre las distintas API de los lenguajes, los dos primeros son los mas extendidos por todo internet, el tercero tambien pero en python tiene muy poco soporte, por esta razon nos centraremos en trabajar con JSON porque con XML en determinadas circunstancias puede volverse caotico.

Anuncios

JSON significa Notacion de Objetos Javascript (por sus siglas en ingles) y este es un derivado de Javascript, dado su longevidad y al hecho de estar extendido en casi todos los lenguajes lo cual nos permite decir que actualmente es un lenguaje independiente, JSON esta basado en dos estructuras:

  • Una coleccion de pares clave/valor
  • Una lista ordenadas de valores
Anuncios

Si observan en python tenemos dos estructuras para trabajar de esta forma (diccionario y lista respectivamente), para entender este concepto vamos a realizar un ejemplo, primero importemos lo necesario:

>>> import sys
>>> import json
Anuncios

La primera sera para un tema que veremos a continuacion y la segunda sera la verdadera encargada de manejar a JSON, nuestro siguiente paso sera la creacion del siguiente objeto:

>>> datos = {
...     'numero_grande': 2 ** 3141,
...     'float_maximo': sys.float_info.max,
...     'una_lista': [2, 3, 5, 7],
... }
>>>
Anuncios

Este sera nuestro diccionario, donde tenemos tres valores, el primero sera ese numero elevado a esa potencia y el segundo va a depender del maximo disponible para nuestra CPU, estos con sus respectivas claves para identificarlas pero la ultima sera una lista con una serie de valores, veamos la ultima parte:

>>> datos_json = json.dumps(datos)
>>> datos_salida = json.loads(datos_json)
>>> assert datos == datos_salida
>>>
Anuncios

El metodo dumps se encargara de serializar la informacion que tenemos en datos, esto significa convertir esta informacion en una cadena formateada de JSON, el siguiente metodo (loads) se encarga de lo opuesto es decir que convertira esta estructura de JSON en una estructura de python, por ultimo chequeamos si la serializacion/deserializacion se hicieron correctamente, pasemos a otro ejemplo:

>>> info = {
...     'nombre_completo': 'Martin Miranda',
...     'direccion': {
...             'calle': 'Libertad 41',
...             'cp': 1012,
...             'ciudad': 'Buenos Aires',
...             'pais': 'Argentina',
...     }
... }
>>>
Anuncios

Aqui crearemos un objeto para almacenar informacion, en este caso primero sera el nombre del individuo, luego los datos del domicilio del mismo, y ahora vamos a probar de mostrarlo con algunas caracteristicas de JSON:

Anuncios
Nota: 
Recuerden que para lo siguiente deben tener importado el modulo json
>>> print(json.dumps(info, indent=2, sort_keys=True))
Anuncios

Aqui usamos a dumps para que muestre el valor de info pero le agregamos dos opciones para que haga una sangria de dos espacios y ordene las claves alfabeticamente, veamos su salida:

{
  "direccion": {
    "calle": "Libertad 41",
    "ciudad": "Buenos Aires",
    "cp": 1012,
    "pais": "Argentina"
  },
  "nombre_completo": "Martin Miranda"
}
Anuncios

Observen como no solamente ordeno los campos externos sino tambien los internos de direccion, tambien vemos que cambio el tamaño de nuestra sangria o tabulacion, vamos a ver una curiosidad con el siguiente ejemplo:

>>> dato_ent = { 'un_tuple':
...     (1, 2, 3, 4, 5),
... }
>>>
Anuncios

Para este ejemplo crearemos un diccionario llamado dato_ent, y en el guardaremos un tuple que lo identificaremos como tal, pasemos a serializar este en nuevo objeto:

>>> dato_json = json.dumps(dato_ent)
Anuncios

Con esto realizamos la serializacion del dato creado anteriormente, probemos de mostrarlo para ver que sucedio:

>>> print(dato_json)
{"un_tuple": [1, 2, 3, 4, 5]}
>>>
Anuncios

En este caso vemos que transformamos nuestro tuple en una lista, como dijimos JSON trabaja con una estructura de diccionario y otra de lista, y que es un tuple? Nada mas ni menos que una lista desordenada y sin todos los beneficios de la misma, pero si lo deserializamos que sucedera? Probemos:

>>> dato_sal = json.loads(dato_json)
>>> print(dato_sal)
{'un_tuple': [1, 2, 3, 4, 5]}
>>>
Anuncios
Anuncios

Procedemos a hacer la deserializacion de este, vemos que la clave la cambio pero el dato que era tuple quedo definitivamente como lista, tengan esto en cuenta a la hora de trabajar porque la tuple que generen se perdera completamente al transformarse en una lista, el inconveniente que tendremos es que no todos los objetos de python pueden serializar a JSON y por lo tanto no es seguro que pueda revertirse, entonces cuales tipos de datos podemos serializar? La respuesta mas simple y correcta seria transformar nuestros objetos al formato mas simple, asi podemos reconstruirlo nuevamente cuando hagamos la deserializacion.

Anuncios

En resumen, hoy hemos visto como intercambiar informacion, en este caso nos centramos en JSON pero mencionamos los otros dos disponibles, hemos visto como serializa y deserializa para enviar y recibir la informacion, tambien hemos visto como podemos modificar orden de los campos y como mostrarlo, por ultimo una particularidad que ocurre con algunos datos al serializarlo, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.50