既然你要在程序啓動時創建具體的類,你將需要知道每個類的實際類。有很多方法可以做到這一點。要做一些簡單的事情,你可以給每個具體類增加一個getLabel()
方法,並用它作爲開關來找出正確的具體類。
// Using jackson-databind
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readValue(json, JsonNode.class);
Enemy enemy = null;
if (GOOMBA_LABEL.equals(node.get("label").asText()))
enemy = mapper.readValue(json, Goomba.class);
我真的很喜歡使用JSON庫功能來解析我的JSON到POJO。但是,執行上述操作實際上需要進行雙解析 - 1)解析一些通用結構(如Map或JsonNode),檢查標籤,然後解析爲POJO。
你可以做的另一件事是在每個JSON字符串前加上一個「Magic Number」,讓你知道它是哪一種類型。那麼你不必再解析JSON。
DataInput input = new DataInputStream(fileInputStream);
int magic = input.readInt();
Enemy enemy = null;
if (GOOMBA_MAGIC == magic) {
String json = input.readUTF();
enemy = mapper.readValue(json, Goomba.class);
}
只要JSON是正確的序列化使用,這取決於你。對它好的東西是人類可讀和可編輯的。如果性能或磁盤使用對您更重要,還有其他序列化技術。對於這樣的事情,JSON似乎很好。