我知道将
JSON字符串转换为Map< String,String>的实现.通过:
public <T1,T2> HashMap<T1,T2> getMapFromJson(String json,Class<T1> keyClazz,Class<T2> valueClazz) throws TMMIDConversionException { if (StringUtils.isEmpty(json)) { return null; } try { ObjectMapper mapper = getObjectMapper(); HashMap<T1,T2> map = mapper.readValue(json,TypeFactory.defaultInstance().constructMapType(HashMap.class,keyClazz,valueClazz)); return map; } catch (Exception e) { Logger.error(e.getMessage(),e.getCause()); } }
但我无法扩展它以将我的JSON转换为Map< String,Set< String>>.显然,上面的方法失败了,因为它打破了Set项并放入列表中.需要一些帮助!!谢谢
示例JSON字符串如下所示.此JSOn必须转换为Map< String,Set< CustomClass>>.
{ "0": [ { "cid": 100,"itemId": 0,"position": 0 } ],"1": [ { "cid": 100,"itemId": 1,"7": [ { "cid": 100,"itemId": 7,"position": -1 },{ "cid": 140625,"position": 1 } ],"8": [ { "cid": 100,"itemId": 8,"9": [ { "cid": 100,"itemId": 9,"position": 0 } ] }
解决方法
试试这个:
JavaType setType = mapper.getTypeFactory().constructCollectionType(Set.class,CustomClass.class); JavaType stringType = mapper.getTypeFactory().constructType(String.class); JavaType mapType = mapper.getTypeFactory().constructMapType(Map.class,stringType,setType); String outputJson = mapper.readValue(json,mapType)