78 lines
2.0 KiB
Python
78 lines
2.0 KiB
Python
|
"""
|
||
|
Javascript Object Notation
|
||
|
"""
|
||
|
import json
|
||
|
|
||
|
# Convertir diccionario en formato JSON, serializing o enconding (ojo con la "ñ")
|
||
|
persona = {"name": "Juan", "edad": 16, "ciudad": "Cañete", "descendencia": False, "titulos": ["ingeniero", "programador"]}
|
||
|
|
||
|
personaJSON = json.dumps(persona, indent=4)
|
||
|
print(personaJSON)
|
||
|
|
||
|
"""
|
||
|
{
|
||
|
"name": "Juan",
|
||
|
"edad": 16,
|
||
|
"ciudad": "Ca\u00f1ete",
|
||
|
"descendencia": false,
|
||
|
"titulos": [
|
||
|
"ingeniero",
|
||
|
"programador"
|
||
|
]
|
||
|
}
|
||
|
"""
|
||
|
|
||
|
with open('persona.json', 'w') as archivo:
|
||
|
json.dump(persona, archivo, indent=4)
|
||
|
|
||
|
# Convertir archivo JSON en un objeto de Python, deserializing o decoding
|
||
|
persona2 = json.loads(personaJSON)
|
||
|
print(persona2)
|
||
|
|
||
|
# desde archivo
|
||
|
print("otra forma")
|
||
|
with open('persona.json', 'r') as archivo:
|
||
|
persona3 = json.load(archivo)
|
||
|
print(persona3)
|
||
|
|
||
|
print("otra forma")
|
||
|
|
||
|
# Clase y funcion personalizada para codificar
|
||
|
class Usuario:
|
||
|
def __init__(self, nombre, edad):
|
||
|
self.nombre = nombre
|
||
|
self.edad = edad
|
||
|
|
||
|
def codificar_usuario(o):
|
||
|
if isinstance(o, Usuario):
|
||
|
return {'nombre': o.nombre, 'edad': o.edad, o.__class__.__name__: True}
|
||
|
raise TypeError('El objeto Usuario no es JSON serializable')
|
||
|
|
||
|
usuario = Usuario('Mia', 27)
|
||
|
|
||
|
usuarioJSON = json.dumps(usuario, default=codificar_usuario)
|
||
|
print(usuarioJSON)
|
||
|
|
||
|
# Otra forma de codificar
|
||
|
from json import JSONEncoder
|
||
|
|
||
|
class CodificarUsuario(JSONEncoder):
|
||
|
def default(self, o):
|
||
|
if isinstance(o, Usuario):
|
||
|
return {'nombre': o.nombre, 'edad': o.edad, o.__class__.__name__: True}
|
||
|
return JSONEncoder.default(self, o)
|
||
|
|
||
|
#usuarioJSON = json.dumps(usuario, cls=CodificarUsuario)
|
||
|
usuarioJSON = CodificarUsuario().encode(usuario)
|
||
|
print(usuarioJSON)
|
||
|
|
||
|
# Funcion personalizada para decodificar JSON en objeto Usuario
|
||
|
def decodificar_usuario(diccionario):
|
||
|
if Usuario.__name__ in diccionario:
|
||
|
return Usuario(nombre=diccionario['nombre'], edad=diccionario['edad'])
|
||
|
return diccionario
|
||
|
|
||
|
usuario = json.loads(usuarioJSON, object_hook=decodificar_usuario)
|
||
|
print(type(usuario))
|
||
|
print(usuario.nombre)
|