我有一个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