I wanted a simple way to easily output JSON for a couple of AppEngine models. A brief search didn't turn up a snippet that looked like what I was looking for, so I wrote this simple module that I call gaejson.py:
# Simple GAE Model JSON Serialization
# Copyright 2009 Max Battcher. Licensed for use under the Ms-PL.
from django.utils import simplejson as json
from google.appengine.api import users
from google.appengine.ext import db
class GaeEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, db.Model):
return dict([(name, getattr(obj, name)) for name
in obj.properties().keys()])
elif isinstance(obj, users.User):
return {
'nickname': obj.nickname(),
'email': obj.email(),
'user_id': obj.user_id(),
'federated_identity': obj.federated_identity(),
'federated_provider': obj.federated_provider(),
}
return super(GaeEncoder, self).default(obj)
# vim: ai et ts=4 sts=4 sw=4
Usage is simple:
from gaejson import GaeEncoder, json
from mymodels import TestModel
test = TestModel.get(... some db key ...)
json.dumps(test, cls=GaeEncoder)
Changes
- 2010-06-21
- Fixed the super arguments, which had been reversed and added support for google.appengine.api.users.User objects.