我需要从远程服务中解析一些JSON数据。
请求和/或响应文档如下。
{
"some": "...",
"someOther": [
"...",
"..."
],
"youDontKnow": "...",
"mayBeThis": [
"what"
]
}
我认为,如您所见,值中只会有string
或array
。
现在,我想知道是否有任何方法可以处理以下映射,而不是映射每个字段。
Map<String, Object> map; // each value may be string or array
这样我就可以通过密钥获取并将值按需转换为String
或String[]
(或List<String>
)。
我该怎么做?
答案 0 :(得分:1)
使用DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY
时,您可以将所有值都视为List
-s。
ObjectMapper mapper = new ObjectMapper();
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
MapType mapType = mapper.getTypeFactory().constructMapType(Map.class, String.class, List.class);
Map<String, List> map = mapper.readValue(jsonFile, mapType);
System.out.println(map);
打印:
{some=[...], someOther=[..., ...], youDontKnow=[...], mayBeThis=[what]}
没有它,您可以使用创建适当类型的默认行为:
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map = mapper.readValue(jsonFile, Map.class);
System.out.println(map);
打印:
{some=..., someOther=[..., ...], youDontKnow=..., mayBeThis=[what]}
第二个解决方案要求您检查是否为List
或String
。第一种解决方案使您可以将每个值都视为List
,并且您有很多简洁的解决方案。第三种选择是使用POJO
,List
属性创建String
,并且Jackson
将自动匹配并解析给定的JSON
。