2010年1月2日土曜日

DatastoreのEntityをJSON化(GAE/J)

スズキです。

こんな感じで、ユーティリティメソッド作ってみました。
(マップにキーをputしなおしてるところがポイントでしょうか?)

--------【Java】--------
public static Map<String, Object> convertToMap(Entity entity) {
    Map<String, Object> map
        = new HashMap<String, Object>(entity.getProperties());
    map.put("key", entity.getKey());
    return map;
}
--------
http://code.google.com/p/suz-lab-gae/source/browse/trunk/suz-lab-gae/src/suz/lab/gae/util/GaeUtil.java?r=92

こんな感じに使うと、

--------【Java】--------
@Override
protected Map<String, Object> createResults() {
    Entity entity = new Entity("feed");
    entity.setProperty("url", new Link(this.getParams().url));
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    datastore.put(entity);
    return GaeUtil.convertToMap(entity);
}
--------
http://code.google.com/p/suz-lab-gae/source/browse/trunk/suz-lab-feed/src/suz/lab/feed/page/other/mypage/IndexJson.java?r=93

こんなJSONになります。

--------【JSON】--------
{
  "errors": [],
  "params": {},
  "results": {
    "key": {
      "name": null,
      "parent": null,
      "id": 10,
      "complete": true,
      "kind": "feed"
    },
    "url": {
      "value": "http:\/\/www.suz-lab.com\/"
    }
  }
}
--------

あれ? "params"に値が入ってないぞ...
publicフィールドにしたからか... なおさなきゃ...

--------
http://www.suz-lab.com

0 コメント: