Estos son mis datos JSON
[ { "id":1, "name":"abc", "phone": "12345", "Charecteristics": [ { "id":1, "name":"Good Looking", "rating": "Average", } { "id":2, "name":"Smart", "rating": "Excellent", } ] }, { ... }, { ... } ]
Tengo dos clases en Python
class Character(object): id = 0 name = "" rating = "" class Person(object): id = 0 name = "" phone = "" Characteristics = []
Necesito analizar los datos JSON e instanciar las clases apropiadas. Las clases se explican por sí mismas: es decir, la persona tiene un conjunto de clases de caracteres.
¿Cómo puedo crear una instancia de estos y almacenar datos de manera adecuada?
Además, ¿cómo voy a acceder a datos personales particulares? Es decir, detalles y características de la persona.
Echa un vistazo al colador ; hace que sea muy fácil convertir una estructura de datos JSON en objetos Python.
Se define un esquema:
import colander class Characteristic(colander.MappingSchema): id = colander.SchemaNode(colander.Int(), validator=colander.Range(0, 9999)) name = colander.SchemaNode(colander.String()) rating = colander.SchemaNode(colander.String()) class Characteristics(colander.SequenceSchema): characteristic = Characteristic() class Person(colander.MappingSchema): id = colander.SchemaNode(colander.Int(), validator=colander.Range(0, 9999)) name = colander.SchemaNode(colander.String()) phone = colander.SchemaNode(colander.String()) characteristics = Characteristics() class Data(colander.SequenceSchema): person = Person()
luego pase su estructura de datos JSON usando lo siguiente:
deserialized = Data.deserialize(json.loads(json_string))
Si estás escribiendo en python 3.6+, lo más fácil es usar marshmallow-dataclass :
from marshmallow_dataclass import dataclass from typing import List @dataclass class Character: id : int name : str rating : str @dataclass class Person: id : int name : str phone : str characteristics : List[Character] my_person, _ = Person.Schema().loads(json_str)