月別アーカイブ: 2011年3月

GoogleAppEngineでsimplejson使ってJSONでレスポンス返してみた

GoogleAppEngineで、クライアントにJSONでデータ返そうとして import json とかやったら使えなかった…orz
まあ当たり前で、GoogleAppEngineのPythonは2.5ベースなのでJSONサポートが組み込まれてないのですな。組み込まれるのは2.6以降だったね。すっかり2.6に慣れててすっかり忘れてたよ。
ということで代替案を考えたところ、GoogleAppEngineには最初からDjangoが入ってるからsimplejson使えるんじゃね、と思ってサンプルコード書いてみた。

# -*- coding: utf-8 -*-

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

from django.utils import simplejson

class MainPage(webapp.RequestHandler):
    def get(self):
        test_data = {
            "data1": u"日本語",
            "data2": "ascii",
            "data3": u"長い文字列を入れてみたいと思いましたが力尽きました。",
            "data4": u"テストデータ作るのもめんどくさいですね",
            "data5": {
                "subdata1": u"入れ子データ1",
                "subdata2": u"入れ子データ2",
                },
            }

        self.response.headers['Content-Type'] = 'application/json; charset=utf-8'
        self.response.out.write(simplejson.dumps(test_data,
                                                 ensure_ascii=False,
                                                 sort_keys=True))

application = webapp.WSGIApplication(
    [('/', MainPage)],
    debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

出力結果はこんな感じ。

{"data1": "日本語", "data2": "ascii", "data3": "長い文字列を入れてみたいと思いましたが力尽きました。", "data4": "テストデータ作るのもめんどくさいですね", "data5": {"subdata1": "入れ子データ1", "subdata2": "入れ子データ2"}}

見事にビンゴでしたとさ。