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

2022-08-31 05:48:13

我正在尝试做这样的事情,但它不起作用:

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

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

但是IDE说:

未选中的分配Map to Map<String,String>

正确的方法是什么?我只使用Jackson,因为这是项目中已经提供的内容,是否有本机Java方法可以转换为/从JSON转换?

在PHP中,我会简单地得到一个数组。我在这里基本上需要同样的东西。json_decode($str)


答案 1

[2020 年 9 月更新]虽然我多年前在这里的原始答案似乎很有帮助,并且仍然得到好评,但我现在使用Google的GSON库,我发现它更直观。

我有以下代码:

public void testJackson() throws IOException {  
    ObjectMapper mapper = new ObjectMapper(); 
    File from = new File("albumnList.txt"); 
    TypeReference<HashMap<String,Object>> typeRef 
            = new TypeReference<HashMap<String,Object>>() {};

    HashMap<String,Object> o = mapper.readValue(from, typeRef); 
    System.out.println("Got " + o); 
}   

它从文件中读取,但也接受 一个,您可以使用以下命令从字符串中获取一个:mapper.readValue()InputStreamInputStream

new ByteArrayInputStream(astring.getBytes("UTF-8")); 

在我的博客上有更多关于映射器的解释。


答案 2

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

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));

推荐