趣味でmixiアプリの開発を始めてる。mixiアプリで値の永続的に使用するには、外部サーバに値を保存する方法と、mixiのkey-valueストアを利用する方法がある。今回は処理が軽くて通信も少なくて済みそうなkey-valueストアに値を保存する方法を選んだのだが、key-valueストアはいわゆるデータベースではないのでどういう形式で値を持たせるかで悩んだ。今回はJSONで保存してみた。
ところが、いざ値を取得してみると、JSONからオブジェクトに戻すことができなかった!
これはどういうことだ!?と、思って先日楽天ブックスから届いたOpenSocial入門を読んで調べていると、永続化されたJSONデータをそのまま取得するとHTMLエスケープされているらしい。これでは使いにくいので、HTMLエスケープしないように明示してデータを取得させに行く必要がある。
// 現在の設定を取得する var req = opensocial.newDataRequest(); var mySetting = {}; var escapeParams = {}; // ここで、JSONデータをHTMLエスケープしないように指示 escapeParams[opensocial.DataRequest.DataRequestFields.ESCAPE_TYPE] = opensocial.EscapeType.NONE; req.add(req.newFetchPersonAppDataRequest("VIEWER", ["setting"], escapeParams), 'selfData'); req.send(function(data){ if(data.hadError()){ // エラー処理 var msg = data.getErrorMessage(); return; }else{ var selfData = data.get('selfData'); if(selfData.hadError()){ return; } var dataAry = selfData.getData()[viewer_id]; if(dataAry != null){ // 値が設定済み mySetting = gadgets.json.parse(dataAry['setting']); } } }
上記のようにしたところ、JSONデータをオブジェクトとして取得することができた。JSONは便利だけれど危険もあるので、HTMLエスケープが自動的に行われるのはいいと思うけれど、OpenSocialアプリ開発を始めたばかりだとはまってしまいそうだったのでメモメモ。
OpenSocial入門 ~ソーシャルアプリケーションの実践開発 | |
技術評論社 2009-01-24 売り上げランキング : 8425 おすすめ平均 |