2010-09-15 6 views
2

Je veux faire quelque chose comme ce type demandé, mais je veux désérialiser au lieu de sérialiser. How to serialize db.Model objects to json?Comment désérialiser JSON à des objets créés à partir de db.Model

Y a-t-il une bibliothèque pour cela? J'utilise Google App Engine et j'obtiens une chaîne JSON d'appengine-rest-server (http://code.google.com/p/appengine-rest-server /).

J'ai posé la question d'une manière différente ici (How to inspect mystery deserialized object in Python), donc j'espère en donnant l'analogie inverse du post du gars ci-dessus, il sera plus clair ce que j'essaie de faire. Si JSON ne fonctionne pas, je peux utiliser XML à la place.

+0

Avez-vous vu ['json.load()'] (http://docs.python.org/library/json.html#json.load)? – NullUserException

+0

Oublié l'URL ci-dessus, mais le gars a dit "donc il utilise (en termes Python) des chaînes, des nombres, des listes et des dicts (quatre types de données très basiques) - et ne désérialiserait pas à mon objet désiré./questions/3706208/comment-inspecter-mystere-deserialise-objet-en-python – NealWalters

+0

Oui, familier avec json.load() mais n'a pas vu de bons/pratiques exemples de comment sérialiser/désérialiser vers/depuis existant – NealWalters

Répondre

2

Vous devriez être en mesure d'instancier simplement une instance de votre modèle souhaité en passant le JSON désérialisé en tant que kwargs au constructeur. Jetez un oeil à la source du SDK dans google.appengine.ext.db (__init__.py) > Model.__init__ method

par exemple, vous pouvez faire:

from myapp.models import MyModel 

results = '{"firstname": "Neal", "lastname": "Walters"}' 
data = json.loads(results) 

instance = MyModel(**data) 

Cela suppose que les touches inf dict vous rentrerez par correspondance JSON exactement les noms des champs, je suppose qu'ils devraient faire si le JSON est généré automatiquement à partir des modèles à l'origine.

+0

Merci, mais puisque la question était il y a plus d'un an, je l'ai soit contourné à l'époque ou suis passé à autre chose ... – NealWalters

+0

Bien sûr, mais la question reste sans réponse ... :) j'espère que c'est utile pour les gens googlent pour un problème similaire La même idée est également possible avec les modèles Django. – Anentropic

Questions connexes