Comment sérialiser db.Modèle d'objets json?
Lors de l'utilisation de
from django.utils import simplejson
sur des objets de types qui dérivent de db.Model
il lève des exceptions. Comment contourner cela?
Vous devez vous connecter pour publier un commentaire.
Ok - mon python pas grand, de sorte que toute aide serait appréciée - Vous n'avez pas besoin d'écrire un analyseur - c'est la solution:
ajouter cette utlity classe http://code.google.com/p/google-app-engine-samples/source/browse/trunk/geochat/json.py?r=55
enregistrer sous json.py
À UTILISER
C'est le navigateur réponse:
output['key'] = str(obj.Key())
de Cette façon, je peux vous référer à la clé pour l'affichage des mises à jour plus tard, et autres joyeusetés.L'exemple fourni par Jader Dias fonctionne très bien pour ma préoccupation après quelques twaeking. Supprimer la méthode encode, car elle contient une référence circulaire. Le réglage de la classe devrait ressembler à:
Comme je l'ai enregistré cette classe dans un fichier appelé utils.py et, le cas échéant, je l'importer en utilisant
Je viens d'appeler les utils.GqlEncoder().coder(résultats), par exemple:
Le résultat devrait ressembler à quelque chose comme ceci (j'ai ajouté quelques retours à la ligne, afin de le rendre un peu plus facile à lire):
json ne peut pas être utilisé pour sérialiser quelque chose de plus que les types de base tels que les dicts, des listes, des ints/longs, et les chaînes de caractères (ce qui n'est pas exhaustive). Par exemple, mais ces commandes ne fonctionnent pas:
Si vous souhaitez sérialiser django objets, reportez-vous à la documentation de django sur la sérialisation, qui utilisent leurs propres bibliothèques, mais ils n'en faire le support de json.
db.Model
, parce quesimplejson.dumps
retourneobject is not JSON serializable
etserializers.serialize
retourneobject has no attribute '_meta'
Puisque je ne pouvais pas trouver une solution, j'ai écrit mon propre, qui n'est pas exactement un sérialiseur JSON, mais un Javascript sérialiseur
'
ou un\n
le JSON sera pas valide, ou si le fichier contient un certain nombre. Donc ne pas utiliser ce — top-voté réponse.De ce que je peux comprendre - et je suis python - avec google app engine le contourner est de sérialiser l'objet de modèle à un dictioanry python objet, puis utilisez simple json pour le dump comme une chaîne json - cela ne fait aucun sens pour moi - peut-être que quelqu'un a le savoir pour serialise à un ditionary (pickel?)
Toute aide sur ce serait de l'AIDE! ne pas impressionné de voir que google app engine n'a pas intégré la solution pour cela.