今日はjsonでのデータやり取りについてちょこっと書きたいと思います。
環境は、Google App Engine(python)とjQueryの使用を想定して書きます。
json形式はjavascriptのオブジェクトをほぼそのまま表現でき、かつコンパクトなので、
クライアントからサーバーに何か階層の深いデータを送る時に使うと楽です。
json形式で送るときは、普通POSTメソッドを使うと思います。
jQueryのajaxメソッドでは、dataTypeを"application/json"に設定すれば、
urlエンコードなどをしないで生のjsonを入れて送信できます。
オブジェクトをjsonの文字列にするにはjson2.jsを使うのが簡単です。
JSON.stringifyはエンコード、JSON.parseがデコードです。
- var json = JSON.stringify({"a": {"b": {"c": ["d", "Hello json!"]}}}); //objをエンコードする
- $.ajax({
- async: true,
- complete: function(){},
- dataType: "application/json",
- data: json, //JSON
- processData: false,
- error: function(XMLHttpRequest, textStatus, errorThrown){
- //httpエラーの場合処理
- }
- success:function(data, dataType){
- //成功した場合の処理
- alert(JSON.parse(data)["b"]["c"][1]);
- }
- type: "POST",
- url: "http://使っているドメイン/json"
- });
GAEの方では組み込みで入っているsimplejsonモジュールを使えます。
pyhtonオブジェクトとjsonとの変換は、デコードがsimplejson.loads(str),
エンコードがsimplejson.dumps(obj)です。
下のコードでは、JsonApiというクラスにurlをルーティングしてそのなかでjsonを読み込み、
responseに返します。うまくいけば"Hello json!"というアラートが出るはずです。
- import cgi
- from google.appengine.ext import webapp
- from google.appengine.ext.webapp.util import run_wsgi_app
- from django.utils import simplejson
- class JsonApi(webapp.RequestHandler):
- def post(self):
- str = self.request.body
- try:
- loaded = simplejson.loads(str)
- self.response.headers['Content-Type'] = "text/plain"
- self.response.out.write(simplejson.dumps(loaded["a"]))
- except:
- self.response.set_status(404); #parse errorなどの場合
- def main():
- application = webapp.WSGIApplication([('/json', JsonApi)])
- run_wsgi_app(application)
- if __name__ == "__main__":
- main()
以上です。記事にするほどの内容か分かりませんが、ドキュメントを読まないで
勘でやっていると意外に時間がかかってしまったりするので、ここにまとめておきました。
0 件のコメント:
コメントを投稿