· JSON (JavaScript Object Notation):
Es un formato para el intercambio de información entre aplicaciones, a
pesar de que en sus inicios fue considerado como parte de JavaScript, es
reconocido por una gran variedad de lenguajes de programación (incluido python)
ya que es independiente al lenguaje que utilicemos.
Actualmente es empleado para
el intercambio de información entre servicios web y APIs y es uno de los
formatos alternativos al XML más utilizado por los desarrolladores. Entre los
módulos propios de python contamos con el modulo: json, utilizado para trabajar
con este formato.
·
Objeto JSON:
Puede definirse como una entidad que posee propiedades, las cuales pueden
ser definidas por nosotros según los datos que necesitemos representar, en el
caso de quienes utilizamos el lenguaje python podemos comparar la estructura de
un objeto json, con la estructura de un formulario python.
·
Sintaxis objeto JSON:
{“propiedad1”
: ”valor1” , ”propiedad2” : ”valor2” , ”propiedad n” : ”valor n”}
Donde la propiedad es una especie de llave a través
de la cual podemos acceder a su valor asociado.
·
Valores permitidos por el
objeto JSON:
o
Para la propiedad: debe
utilizarse una cadena de caracteres, la cual debe colocarse entre comillas
dobles.
o
Para los valores podemos usar los siguientes
tipos de datos:
§ Números (enteros o float).
§ Un string entre comillas dobles.
§ Un arreglo.
§ Un objeto JSON (entre llaves).
·
Ejemplo básico:
Supongamos que necesitamos crear un objeto para representar un automóvil, para el cual debemos reflejar; marca, modelo y primer año que estuvo disponible en el mercado, nos quedaría el siguiente objeto JSON:
auto {"marca":"toyota","modelo":"celica","iniciop":"1970"}.
- Ejemplo práctico:
Un objeto json, puede contener en su interior otros objetos json, como veremos en el siguiente ejemplo en el cual simularemos la recepción de información en formato json, la cual extraeremos del archivo llamado prueba.json.
Para los datos que recibiremos, se plantea representar automóviles, los cuales deben agruparse según su marca y a su vez necesitamos saber el modelo y el año en el que inicio la producción de cada auto, la estructura básica de la información y los datos que utilizaremos se muestran a continuación:
Autos:
Toyota:
1.
Modelo:
toyota 4runner, Primer año: 1984.
2.
Modelo: toyota
corolla, Primer año: 1971.
3.
Modelo: toyota celica, Primer año: 1970.
Chevrolet:
1.
Modelo: chevrolet camaro, Primer año: 1967.
2.
Modelo: chevrolet chevelle, Primer año: 1964.
3.
Modelo: chevrolet
corvette c4, Primer año: 1984.
Ford:
1.
Modelo: ford mustang, Primer año: 1964.
2.
Modelo: ford shelby gr-1, Primer año: 2005.
3.
Modelo: ford T, Primer año: 1908.
El objeto JSON que
representa los datos anteriores se muestra a continuación:
{"autos":
[
{"toyota":
[
{"modelo":"toyota 4runner","iniciop":"1984"},
{"modelo":"toyota corolla","iniciop":"1971"},
{"modelo":"toyota celica","iniciop":"1970"}
]
},
{"chevrolet":
[
{"modelo":"chevrolet camaro","iniciop":"1967"},
{"modelo":"chevrolet chevelle","iniciop":"1964"},
{"modelo":"chevrolet corvette C4","iniciop":"1984"}
]
},
{"ford":
[
{"modelo":"ford mustang","iniciop":"1964"},
{"modelo":"ford shelby gr-1","iniciop":"2005"},
{"modelo":"ford t","iniciop":"1908"}
]
}
]
}
- Cargar datos de archivo .json usando python:
Como indique anteriormente, python cuenta con el modulo: json, el cual nos ofrece métodos para trabajar con el formato JSON,a continuación procedo a obtener los datos del archivo: prueba.json para lo cual podemos usar cualquiera de los siguientes métodos:
o json.load():
recibe como parámetro un archivo que contiene objetos json, y devuelve un
diccionario python , con las propiedades y valores indicadas en el objeto
json.
import json datos=json.load(open('prueba.json','r')) print type(datos)
<type 'dict'>
import json datos=open('prueba.json','r').read() print type(datos) datos=json.loads(datos) print type(datos)
<type 'str'> <type 'dict'>
·
Acceder a elementos de un objeto json:
Una vez cargado nuestro
objeto json, podemos acceder a sus elementos, solo tenemos que tener claro su
estructura, en el caso de nuestro archivo : prueba.json , está formado por un
objeto json de clave: "autos" y cuyos valores , son 3 objetos json
cuyas claves son : "toyota", "chevrolet" y
"ford", a su vez cada una de las marcas está formada por 3 objetos
json que contienen la información de los automóviles. A continuación
muestro una representación gráfica del objeto json: "autos":
Supongamos que deseamos obtener
los datos del auto: toyota 4runner, lo hacemos con el siguiente código:
import json datos=open('prueba.json','r').read() datos=json.loads(datos) print datos["autos"][0]["toyota"][0]
{u'iniciop':u'1984',u'modelo':u'toyota 4runner'}
Si queremos imprimir los datos de
todos los autos de una marca específica, podemos hacerlo de la siguiente
manera:
import json llave_marca="toyota" indice_marca=0 datos=open('prueba.json','r').read() datosjson.loads(datos) for auto in datos["autos"][indice_marca][llave_marca]: print"############################################" print"Modelo: ",auto["modelo"] print"Inicio produccion en:" ,auto["iniciop"] print"\n"
###################################### Modelo : toyota 4runner Inicio produccion en : 1984 ###################################### Modelo : toyota corolla Inicio produccion en : 1971 ###################################### Modelo : toyota celica Inicio produccion en : 1970
Si queremos imprimir los datos de todo el objeto: "autos" una posible solución es la siguiente:
import json datos=open('prueba.json','r').read() datos=json.loads(datos); for indice_marca in datos["autos"]: for marca in indice_marca.keys(): for auto in indice_marca[marca]: print"######################################" print "Modelo: ",auto["modelo"] print "Inicio produccion: ",auto["iniciop"] print"\n"
###################################### Modelo : toyota 4runner Inicio produccion en : 1984 ###################################### Modelo : toyota corolla Inicio produccion en : 1971 ###################################### Modelo : toyota celica Inicio produccion en : 1970 ###################################### Modelo : chevrolet camaro Inicio produccion en : 1967 ###################################### Modelo : chevrolet chevelle Inicio produccion en : 1964 ###################################### Modelo : chevrolet corvette C4 Inicio produccion en : 1984 ###################################### Modelo : ford mustang Inicio produccion en : 1964 ###################################### Modelo : ford shelby gr-1 Inicio produccion en : 2005 ###################################### Modelo : ford t Inicio produccion en : 1908
- Andrearrs. (29/5/2014). XML JSON YAML: Formatos para intercambiar informacion. Disponible en: https://hipertextual.com/archivo/2014/05/xml-json-yaml/
- Mario Pérez. ¿Qué es y para qué sirve JSON? Disponible en:https://geekytheory.com/json-i-que-es-y-para-que-sirve-json/
- Mario Pérez. ¿Como utilizar JSON con PYTHON? Disponible en: https://geekytheory.com/como-utilizar-json-en-python/