我試圖使用Objectify作爲持久層將JSON文檔存儲到AppEngine數據存儲中。爲了能夠查詢文件值,而不是僅僅將整個文檔作爲String
場,我創建了一個MapEntity
它看起來像這樣:用AppEngine存儲JSON文檔
@Entity(name="Map")
public class MapEntity {
@Id
private Long id;
private Map<String,String> field;
// Code omitted
}
由於最終當「展開」每次JSON文件中的鍵值可以與地圖來表示
實施例:
String subText = "{\"first\": 111, \"second\": [2, 2, 2], \"third\": 333}";
String jsonText = "{\"first\": 123, \"second\": [4, 5, 6], \"third\": 789, \"fourth\":"
+ subText + "}";
我將具有存儲在數據存儲中的地圖字段:
KEY VALUE
field.first => 123
field.second => [4,5,6]
field.third => 789
field.fourth-first => 111
field.fourth-second => [2,2,2]
field.fourth-third => 333
如果用我parse()
方法:
使用JSON.Simple庫解析JSON文件,然後執行遞歸解析:
private MapEntity parse(String root, MapEntity entity, Map json) {
Iterator iter = json.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
if (entry.getValue() instanceof Map){
entity = parse((String)entry.getKey()+"-", entity, (Map) entry.getValue());
System.out.println("Map instance");
} else {
entity.setField(root + String.valueOf(entry.getKey()), String.valueOf(entry.getValue()));
}
}
return entity;
}
我的應用程序是這樣的:
MapEntity jsonEntity = new MapEntity();
Map json = null;
json = (Map) parser.parse(jsonText, containerFactory); // JSON.Simple parser
jsonEntity = parse("", jsonEntity, json);
我遇到的問題有:
- 我無法使用「。」點在地圖鍵字段,所以我必須用「 - 」
- 也是我在存儲JSON文件的方法是不是很有效
JSONObject的斷開鏈接 – coto
@coto斷開的鏈接已修復。 –