我试着做一些这样的事情,但它不起作用:

Map<String, String> propertyMap = new HashMap<String, String>();

propertyMap = JacksonUtils.fromJSON(properties, Map.class);

但是IDE说:

未检查映射到映射<字符串,字符串>

正确的做法是什么? 我只使用杰克逊,因为这是什么已经在项目中,有一个本地Java的方式转换到/从JSON?

在PHP中,我将简单地json_decode($str),我将返回一个数组。我在这里也需要同样的东西。


当前回答

TypeFactory试试。下面是Jackson JSON(2.8.4)的代码。

Map<String, String> result;
ObjectMapper mapper;
TypeFactory factory;
MapType type;

factory = TypeFactory.defaultInstance();
type    = factory.constructMapType(HashMap.class, String.class, String.class);
mapper  = new ObjectMapper();
result  = mapper.readValue(data, type);

下面是老版本Jackson JSON的代码。

Map<String, String> result = new ObjectMapper().readValue(
    data, TypeFactory.mapType(HashMap.class, String.class, String.class));

其他回答

Kotlin的示例代码。

class HeathCheckController {
    fun get(): Any {
        val config = this::class.java.getResource("/git-info.yml")?.readText()
        return ObjectMapper()
            .readValue(config, Map::class.java)
    }
}

Gradle

val jackson = "2.13.2"

从字符串转换到JSON映射:

Map<String,String> map = new HashMap<String,String>();

ObjectMapper mapper = new ObjectMapper();

map = mapper.readValue(string, HashMap.class);

TypeFactory试试。下面是Jackson JSON(2.8.4)的代码。

Map<String, String> result;
ObjectMapper mapper;
TypeFactory factory;
MapType type;

factory = TypeFactory.defaultInstance();
type    = factory.constructMapType(HashMap.class, String.class, String.class);
mapper  = new ObjectMapper();
result  = mapper.readValue(data, type);

下面是老版本Jackson JSON的代码。

Map<String, String> result = new ObjectMapper().readValue(
    data, TypeFactory.mapType(HashMap.class, String.class, String.class));

使用谷歌的Gson

为什么不用这里提到的谷歌的Gson呢?

非常直截了当,帮我完成了任务:

HashMap<String,String> map = new Gson().fromJson( yourJsonString, new TypeToken<HashMap<String, String>>(){}.getType());

你得到的警告是由编译器完成的,而不是由库(或实用程序方法)。

直接使用Jackson的最简单方法是:

HashMap<String,Object> props;

// src is a File, InputStream, String or such
props = new ObjectMapper().readValue(src, new TypeReference<HashMap<String,Object>>() {});
// or:
props = (HashMap<String,Object>) new ObjectMapper().readValue(src, HashMap.class);
// or even just:
@SuppressWarnings("unchecked") // suppresses typed/untype mismatch warnings, which is harmless
props = new ObjectMapper().readValue(src, HashMap.class);

你调用的实用工具方法可能会做类似的事情。