2010-01-05 20 views
4

Quelqu'un at-il jsonpickle travailler sur le moteur de l'application google? Mes journaux disent qu'il n'y a pas de module mais il y a un module aussi sûr que vous êtes né. J'utilise jsonpickle 0.32.google app engine jsonpickle

<type 'exceptions.ImportError'>: No module named jsonpickle 
Traceback (most recent call last): 
    File "/base/data/home/apps/xxxxx/xxxxxxxxxxxxxxxxx/main.py", line 4, in <module> 
    import jsonpickle 

Répondre

4

J'ai réussi à faire fonctionner l'enregistrement django.utils.simplejson comme un codeur/décodeur json. Dans ce vrai fichier Pizza classe index.py est codé et décodé:

from google.appengine.ext import webapp 
from google.appengine.ext.webapp.util import run_wsgi_app 

import jsonpickle 

class Pizza: 
    pass     

class Example(webapp.RequestHandler): 
    def get(self): 
     jsonpickle.load_backend('django.utils.simplejson', 
           'dumps','loads',ValueError) 
     encoded = jsonpickle.encode(Pizza()) 
     self.response.out.write(jsonpickle.decode(encoded).__class__) 

run_wsgi_app(webapp.WSGIApplication([('/', Example),],debug=True)) 
+1

C'est la solution préférée: http://jsonpickle.github.com/api.html#choosing-and-loading-backends –

3

Comme this post explique, jsonpickle nécessite un des quelques modules JSON sous-jacents. Je résoudre le problème comme suit: - mettre en haut de votre module (s) qui ont besoin jsonpickle les quelques lignes suivantes:

import sys 
import django.utils.simplejson 
sys.modules['simplejson'] = django.utils.simplejson 

Cette traite du problème: jsonpickle a besoin simplejson (comme l'un des modules JSON il peut utiliser), mais GAE l'a comme django.utils.simplejson, donc vous avez besoin de "alias" de manière appropriée.

+1

hmm, je vois toujours la même erreur: même après la fixation de votre « Diango » faute de frappe :). Est-il possible GAE a cache qu'il ne lâchera pas? –

+0

@cellis, je ne vois pas comment le cache pourrait avoir quelque chose à voir avec ça - sys.modules est le seul et unique "cache" pour les modules chargés en Python (GAE ou non) et dans GAE il garde les modules chargé dans la demande précédente servie dans ce processus, ou construit comme il va si ce processus sert sa première demande. "il n'y a pas de modules" ne peut pas être le message d'erreur ** exact ** que vous voyez, alors qu'en est-il un copier-coller de la trace d'erreur à la place? (Veuillez modifier votre réponse pour fournir cette information!). –