永続的APIを使ってマイミクの情報をjsonで保存

    function write_friends() {
        var data;
        var req = opensocial.newDataRequest();
        req.add(req.newFetchPeopleRequest(opensocial.newIdSpec({ userId: 'OWNER', groupId: 'FRIENDS' }), { max: 10 }), 'friends');
        req.send(function(res) { 
            data = res.get('friends').getData().asArray().map(function(p) { return { "nickname": escape(p.getDisplayName()), "id": p.getId()} });
        var request = opensocial.newDataRequest();
        var key   = "friends";
        var value = gadgets.json.stringify(data);
        request.add(request.newUpdatePersonAppDataRequest(
                opensocial.IdSpec.PersonId.VIEWER, key, value));
        request.send();
        });
    }

nicknameは文字化けしたからescape()した

data = res.get('friends').getData().asArray().map(function(p) { return { "nickname": escape(p.getDisplayName()), "id": p.getId()} });

valueで渡すときに一工夫

var value = gadgets.json.stringify(data);

参照するとき

    function read_friends() {
        var request = opensocial.newDataRequest();
        request.add(request.newFetchPersonRequest(
                opensocial.IdSpec.PersonId.VIEWER), "viewer");
        var param = {};
        param[opensocial.IdSpec.Field.USER_ID] = opensocial.IdSpec.PersonId.VIEWER;
        var idSpec = opensocial.newIdSpec(param);
        request.add(request.newFetchPersonAppDataRequest(idSpec, ["friends"]), "viewer_data");
        request.send(function (response) {
            if (response.hadError()) {
                // エラー処理
                alert("エラー");
                return;
            }
            var viewer = response.get("viewer").getData();
            var data   = response.get("viewer_data").getData();
            var viewers_data = data[viewer.getId()];
            var rd = viewers_data["friends"];
            rd = gadgets.util.unescapeString(rd);
            var value = gadgets.json.parse(rd); 
            
            alert(value[0].nickname); 
        });
    }

ここ嵌った

rd = gadgets.util.unescapeString(rd);
var value = gadgets.json.parse(rd); 

これ参考にしたのはmixiのsampleとか id:amachang さんの記事とかです。ていうかそのままだけど
この人すごいよなぁー。カッコ良いし。

ぼくもなんちゃってSEからノーマルSEにレベルアップしたい。


自分用メモだけど突っ込み・訂正・dis歓迎

■追記
id:ryoff に指摘された
unescape()しましょう
alert(unescape(value[0].nickname));
さーせん!