这是我将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支持的非集合属性直接存储在Entity的属性中。然后,对于Map
,使用具有当前实体密钥的父密钥创建新实体,依此类推。
我支持的JSON接口类型的基础是:http://code.google.com/p/json-simple/
我现在遇到的问题是,我不知道如何处理java.util.List
,以及如何以类似地图的方式存储它。
有关如何实现这一目标的任何建议吗?