Python中文网

一个关于 编程问题的解答网站.

有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何用Jackson JSON将JSON字符串转换为映射<string,Set<string>>

我知道通过以下方式将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>>。显然,上述方法失败了,因为它打破了设置项并将其放入列表中。这里需要帮助!!谢谢

示例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
        }
    ]
}

共 (1) 个答案

  1. # 1 楼答案

    不幸的是Class真的不能表达泛型类型;因此,如果您的值类型是泛型的(比如Set<String>),则需要传递JavaType。这也可以用来构造结构化的JavaType实例