GAE/PythonデータストアのエンティティをQueryクラスからJSONに変換する。¶
GAE/Pythonに格納したデータをJSONで取得したいなぁと思ったのだが、一から全部書くのは面倒だったので何かないかと思っていたら、 こちらのブログ を見て、 Google CodeにGQLからJSONに変換するツールがある のを知った。
ただ、このコードだと、Queryクラスでは使えない。普段Queryクラスの方を使っているので下記のように変更した。
$ diff -u json.py.org json.py
--- json.py.org 2011-04-20 15:42:18.000000000 +0900
+++ json.py 2011-04-20 16:10:33.000000000 +0900
@@ -48,7 +48,7 @@
if hasattr(obj, '__json__'):
return getattr(obj, '__json__')()
- if isinstance(obj, db.GqlQuery):
+ if isinstance(obj, db.GqlQuery) or isinstance(obj, db.Query):
return list(obj)
elif isinstance(obj, db.Model):
こんな感じでやれば、
import json
from models import BodyComposition
from google.appengine.ext import webapp
from google.appengine.ext import db
class DataBodyComposition(webapp.RequestHandler):
def get(self):
body_compos_query = BodyComposition.all()
self.response.out.write(json.encode(body_compos_query))
JSONにできましたよと。
[{"measurement_datetime": {"ctime": "Wed Apr 20 01:50:00 2011", "hour": 1, "isoweekday": 3, "month": 4, "second": 0, "microsecond": 0,
"isocalendar": [2011, 16, 3], "timetuple": [2011, 4, 20, 1, 50, 0, 2, 110, -1], "year": 2011, "epoch": 1303264200.0,
"isoformat": "2011-04-20T01:50:00", "day": 20, "minute": 50}, "body_age": 35, "weight": 66.700000000000003,
"basal_metabolism": 1580, "bmi": 22.100000000000001, "skeltal_mascle_percentage": 36.700000000000003,
"bodyfat_percentage": 21.300000000000001,
"ownerid": {"nickname": "test@example.com", "email": "test@example.com", "auth_domain": "gmail.com"}, "bodyfat_lv": 7}]