如何使用Jackson JSON将JSON字符串转换为Map>

前端之家收集整理的这篇文章主要介绍了如何使用Jackson JSON将JSON字符串转换为Map>前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道将 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)

猜你在找的JavaScript相关文章