これは、JSON および JSON に似たドキュメントを「ネイティブに」GAE データストアに格納するという私の考えです。
protected void createEntity(Key parent, Map obj){
try {
Entity e = new Entity(
parent == null ? createKey(_kind, (String) obj.get(OBJECT_ID)) : parent);
Iterator it = obj.keySet().iterator();
while (it.hasNext()){
String key = (String) it.next();
if (obj.get(key) == null){
e.setProperty(key, null);
} else if (obj.get(key) instanceof String) {
setProperty(e, key, obj.get(key));
} else if(obj.get(key) instanceof Number) {
setProperty(e, key, obj.get(key));
} else if(obj.get(key) instanceof Boolean) {
setProperty(e, key, obj.get(key));
} else if(obj.get(key) instanceof List) {
// Problem area, right way to store a list?
// List may contain JSONObject too!
} else if(obj.get(key) instanceof Map){
// Update: Ooops, this cause StackOverFlow error!
Key pKey = createKey(e.getKey(), _kind, (String) obj.get(key));
e.setProperty(key, pKey.toString()); // not sure?
createEntity(pKey, obj);
}
}
_ds.put(e);
} catch (ConcurrentModificationException e){
} catch (Exception e) {
// TODO: handle exception
}
}
このアプローチは、GAE がサポートするコレクション以外のプロパティがエンティティのプロパティに直接格納される、再帰的な put です。次にMap
、現在のエンティティ キーを持つ親キーを使用して、新しいエンティティが作成されます。
サポートされている JSON インターフェースのタイプの基礎は次のとおりです: http://code.google.com/p/json-simple/
私が今抱えている問題は、 を処理するjava.util.List
方法と、おそらくマップのような方法で保存する方法がわからないことです。
これを達成する方法について何か提案はありますか?