如何将JSON字符串转换为具有Jackson JSON的Map >(How to convert a JSON string to a Map> with Jackson JSON)
我知道通过以下方式将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, "position": 0 } ], "7": [ { "cid": 100, "itemId": 7, "position": -1 }, { "cid": 140625, "itemId": 7, "position": 1 } ], "8": [ { "cid": 100, "itemId": 8, "position": 0 } ], "9": [ { "cid": 100, "itemId": 9, "position": 0 } ] }I am aware of the implementation which converts JSON string to a Map<String, String> through :
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()); } }But I cannot extend it to convert my JSON to a Map<String, Set<String>>. The above method fails, obviously, as it breaks the Set items and puts in the list. Need some help here!! Thanks
Sample JSON String is as below. This JSOn has to converted to a Map<String, Set<CustomClass>>.
{ "0": [ { "cid": 100, "itemId": 0, "position": 0 } ], "1": [ { "cid": 100, "itemId": 1, "position": 0 } ], "7": [ { "cid": 100, "itemId": 7, "position": -1 }, { "cid": 140625, "itemId": 7, "position": 1 } ], "8": [ { "cid": 100, "itemId": 8, "position": 0 } ], "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)Try this:
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)更多推荐
发布评论