Google App Engine JSONPICKLE - PullRequest
       17

Google App Engine JSONPICKLE

4 голосов
/ 05 января 2010

У кого-нибудь есть jsonpickle, работающий на движке приложений Google? В моих журналах написано, что нет модуля, но есть модуль точно такой же, как и вы. я использую jsonpickle 0.32.

<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

Ответы [ 2 ]

4 голосов
/ 05 января 2010

Мне удалось заставить его работать, регистрируя django.utils.simplejson в качестве кодера / декодера json. В этом реальном файле index.py Pizza кодируется и декодируется обратно:

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))
3 голосов
/ 05 января 2010

Как объясняет этот пост , jsonpickle требует один из нескольких базовых модулей JSON. Я бы исправил эту проблему следующим образом - поместите в верхнюю часть ваших модулей, которые должны jsonpickle, следующие несколько строк:

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

Это решает проблему: jsonpickle нуждается в simplejson (как один из модулей JSON, который он может использовать), но GAE имеет его как django.utils.simplejson, поэтому вам необходимо соответствующим образом «псевдоним».

...