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

新手上路,请多包涵

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

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

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

但是IDE说:

未经检查的分配 Map to Map<String,String>

这样做的正确方法是什么?我只使用 Jackson,因为这是项目中已经可用的,是否有一种本地 Java 方式来转换为 JSON 或从 JSON 转换?

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

原文由 adamJLev 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 730
2 个回答

[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() 也将接受 InputStream 并且您可以使用以下命令从字符串中获取 InputStream

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

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

原文由 djna 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

原文由 Ning Sun 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题