Trabajando con JSON

¿Que 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.

Notación de JSON

Nombre/Par Valores

Para asignar a un nombre un valor debemos usar los dos puntos ‘:’ este separador es el equivalente al igual (‘=’) de cualquier lenguaje.


In [ ]:
"Nombre" : "José Miguel"

Valores en JSON

Los posibles valores que podemos encontrar en Json son los siguientes:

  • Un número (entero o flaot)
  • Un string (entre comillas simples)
  • Un booleano (true o false)
  • Un array (entre corchetes)
  • Un objeto (entre {})
  • Null

Ejemplo de OBJETO


{ "NombreFruta":"Manzana" , "Cantidad":20 }

Ejemplo de ARRAYS


{"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} ] } ] }

Prueba este array en la web

Codificación JSON dumps()

Convierte objetos Python a JSON

Sintaxis de json.dumps

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding='utf-8', default=None, **kw)


In [40]:
import json
 
data = {"Fruteria": [  {"Fruta":   [    {"Nombre":"Manzana","Cantidad":10.5},    {"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:', repr(data)
  
#Nos devuelve el String con el JSON
data_string = json.dumps(data)
print '\nJSON:', data_string

#Ahora trabajamos con indent
print '\nJSON con indent:', json.dumps(data, indent = 2)


DATA: {'Fruteria': [{'Fruta': [{'Nombre': 'Manzana', 'Cantidad': 10.5}, {'Nombre': 'Pera', 'Cantidad': 20}, {'Nombre': 'Naranja', 'Cantidad': 30}]}, {'Verdura': [{'Nombre': 'Lechuga', 'Cantidad': 80}, {'Nombre': 'Tomate', 'Cantidad': 15}, {'Nombre': 'Pepino', 'Cantidad': 50}]}]}

JSON: {"Fruteria": [{"Fruta": [{"Nombre": "Manzana", "Cantidad": 10.5}, {"Nombre": "Pera", "Cantidad": 20}, {"Nombre": "Naranja", "Cantidad": 30}]}, {"Verdura": [{"Nombre": "Lechuga", "Cantidad": 80}, {"Nombre": "Tomate", "Cantidad": 15}, {"Nombre": "Pepino", "Cantidad": 50}]}]}

JSON con indet: {
  "Fruteria": [
    {
      "Fruta": [
        {
          "Nombre": "Manzana", 
          "Cantidad": 10.5
        }, 
        {
          "Nombre": "Pera", 
          "Cantidad": 20
        }, 
        {
          "Nombre": "Naranja", 
          "Cantidad": 30
        }
      ]
    }, 
    {
      "Verdura": [
        {
          "Nombre": "Lechuga", 
          "Cantidad": 80
        }, 
        {
          "Nombre": "Tomate", 
          "Cantidad": 15
        }, 
        {
          "Nombre": "Pepino", 
          "Cantidad": 50
        }
      ]
    }
  ]
}

In [ ]:

Decodificar JSON json_loads(String)

Convertimos un JSON a un objeto Python


In [14]:
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}   ]  } ]}
 
data_string = json.dumps(data)
print 'ENCODED:', data_string
 
print "\n"    
decoded = json.loads(data_string)
print 'DECODED:', decoded


ENCODED: {"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}]}]}


DECODED: {u'Fruteria': [{u'Fruta': [{u'Nombre': u'Manzana', u'Cantidad': 10}, {u'Nombre': u'Pera', u'Cantidad': 20}, {u'Nombre': u'Naranja', u'Cantidad': 30}]}, {u'Verdura': [{u'Nombre': u'Lechuga', u'Cantidad': 80}, {u'Nombre': u'Tomate', u'Cantidad': 15}, {u'Nombre': u'Pepino', u'Cantidad': 50}]}]}

Sintaxis de json_loads()

La síntaxis de loads es la siguiente json.loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)


In [39]:
from decimal import Decimal
json_string='{"name":"Product-1","quantity":1,"price":12.50}'
print "Salida estandar " + repr(json.loads(json_string))
print "\n"
print "Modificado Float " + repr(json.loads(json_string, parse_float=Decimal))


Salida estandar {u'price': 12.5, u'name': u'Product-1', u'quantity': 1}


Modificado Float {u'price': Decimal('12.50'), u'name': u'Product-1', u'quantity': 1}

Ejemplo de busqueda de elemento


In [19]:
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}   ]  } ]}
 
#encoded
data_string = json.dumps(data)
 
#Decoded
decoded = json.loads(data_string)
 
print "Tenemos "+str(decoded["Fruteria"][1]["Verdura"][0]["Cantidad"])+" Lechugas."
print "Es una " + (decoded["Fruteria"][1]["Verdura"][0]["Nombre"])


Tenemos 80 Lechugas.
Es una Lechuga

In [20]:
import json
obj_json = u'{"answer": [42.2], "abs": 42}'
obj = json.loads(obj_json)
print(repr(obj))


{u'answer': [42.2], u'abs': 42}

In [21]:
class User(object):
    def __init__(self, name, password):
        self.name = name
        self.password = password
alice = User('Alice A. Adams', 'secret')
def jdefault(o):
    return o.__dict__
print(json.dumps(alice, default=jdefault))


{"password": "secret", "name": "Alice A. Adams"}


In [26]:
import json

# lets start with a python structure and convert it to json string
python_object = {'some_text': 'my text',
                 'some_number': 12345,
                 'null_value': None,
             'some_list': [1,2,3]}
# here we are converting python object to json string
json_string = json.dumps(python_object)
print json_string
print "\n"
# json_string = '{"some_list": [1, 2, 3], "some_text": "my text", 
#                 "some_number": 12345, "null_value": null}'
# api converts a python dictionary to json object and vice versa
# At this point we have a json_string in our hands. Now lets convert it back to pyton structure
new_python_object = json.loads(json_string)
print new_python_object
# new_python_object = {u'some_list': [1, 2, 3], u'some_text': u'my text',
#                      u'some_number': 12345, u'null_value': None}


{"some_list": [1, 2, 3], "some_text": "my text", "some_number": 12345, "null_value": null}


{u'some_list': [1, 2, 3], u'some_text': u'my text', u'some_number': 12345, u'null_value': None}

In [ ]: