首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Jackson JSON将JSON字符串转换为Map<String、String>

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

Stack Overflow用户
提问于 2010-03-27 00:46:42
回答 10查看 350.5K关注 0票数 215

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

代码语言:javascript
复制
Map<String, String> propertyMap = new HashMap<String, String>();

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

但是IDE说:

未选中的

assignment Map to Map<String,String>

这样做的正确方法是什么?我之所以使用Jackson,只是因为它已经在项目中可用了,有没有一种原生的Java方法来转换JSON?

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

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-03-27 01:04:42

更新2020年9月虽然我在这里的原始答案,多年前,似乎是有帮助的,并仍然得到越来越多的支持,我现在使用来自谷歌的GSON库,我发现它更直观。

我得到了以下代码:

代码语言:javascript
复制
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()也会接受InputStream,您可以使用以下命令从字符串中获取InputStream

代码语言:javascript
复制
new ByteArrayInputStream(astring.getBytes("UTF-8")); 

my blog上有更多关于映射器的解释。

票数 355
EN

Stack Overflow用户

发布于 2010-06-20 01:42:23

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

代码语言:javascript
复制
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的旧版本的代码。

代码语言:javascript
复制
Map<String, String> result = new ObjectMapper().readValue(
    data, TypeFactory.mapType(HashMap.class, String.class, String.class));
票数 60
EN

Stack Overflow用户

发布于 2010-03-27 02:24:48

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

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

代码语言:javascript
复制
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);

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

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2525042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档