[opensocial]永続化データに配列を保存する

OpenSocialアプリでPersistence APIを使って配列を保存するのに少々つまづいたので備忘録としてメモ。FXBの川野辺です。

「OpenSocial アプリでは、データは常に文字列として格納され、また、返されるすべてのデータに対して自動的に HTML エスケープが行われる」そうです。

なので、配列を保存する場合はずばり次のようにする必要があります。

var req = opensocial.newDataRequest();
// 保存したい配列
var arr = ['a', 'b', 'c'];
// json形式の文字列にする
var value = gadgets.json.stringify(arr);
req.add(req.newUpdatePersonAppDataRequest(idSpec, 'key', value), 'appData');
req.send(function(){//処理});

で、取得する場合は

var appData = res.get("appData").getData()[viewer.getId()];
var str = appData['key'];
var arr = gadgets.json.parse(gadgets.util.unescapeString(str));

とすれば、arrは配列として復活します。

データは文字列として保存し(gadgets.json.stringify())、
取得時はHTMLエスケープされているので、
アンエスケープして(gadgets.util.unescapeString())、
文字列から配列にパースする(gadgets.json.parse())
ということのようです。

今回は、配列を例にとりあげましたが、オブジェクトでも同様の流れになるかと思います。

わかっていても、いざコードを書くとなかなか煩わしい部分なのでメモっておきました。

ちなみに、v8.0以降ならデータ取得時のHTMLエスケープを回避する方法もあるようです。

var params = {};
params[opensocial.DataRequest.DataRequestFields.ESCAPE_TYPE] = opensocial.EscapeType.NONE;
req.add(req.newFetchPersonAppDataRequest(idSpec, keyArr, params), key);

上のようなパラメータを付けてリクエストすればgadgets.util.unescapeString()を使用しなくてもいいみたいです。
ただ、コードは逆に長くなるし、なんのためにあるんだがよく分かりませんが。。

参考:プルグラムの件 - OpenSocial-Japanプルグラムの件ルグラムの件

このページのトップへ

SERVICE

Webサイトデザイン
CMS開発構築
Flashムービー制作

CSS Nite in Shizuoka

スタッフニュース

more