""" 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)