我有一個JSON是類似以下內容:轉換JSON爲Java對象,提供錯誤的類型枚舉
[{"type":"chair", "color":"red", "owners":["A","B"]}, {"type":"vase", "shape":"oval", "owners":["B", "C"]}]
可以看出,這兩個條目是不同的。所以我需要反序列化這個json並實例化2個對象Chair和Vase。上面的所有者應該是適當對象中的枚舉列表。 json可以有許多其他不同的條目,並且可以以任何順序。所以我這樣做:
List<Map<String, Object>> things = objectMapper.readValue(json,
objectMapper.getTypeFactory().constructCollectionType(List.class, Map.class));
東西是地圖列表,每個地圖將對應一件事。我遍歷列表並從每個映射中檢查'type'並實例化適當的對象。 例如:
if map.get("type") == "chair" then new Chair(map.get("color"), map.get("owners"));
現在我有一個枚舉所有者。所以我這樣做:
List<OWNERS> owners = (ArrayList<OWNERS>) map.get("owners");
我確實得到清單。但是,當我確認是這樣的:
assertEquals(OWNERS.A, owners.get(0));
我得到錯誤: '預計java.lang.OWNERS( 「A」)卻得到了java.lang.String中( 「A」)'
,你可以看到業主的類型是List。 我錯過了什麼?我解析錯誤的方式?
您使用的是哪種JSON API?如果有方法將字符串映射到枚舉,請使用方法constructCollectionType檢查類。枚舉是一個Java概念,而不是JSON。 – 2014-10-11 00:58:34