如何将嵌套的 HashMap 转换为 Jettison JSONObject

How to convert Nested HashMap to Jettison JSONObject

我必须将 Map> 转换为 Codehaus-Jettison JSONObject。

我知道使用 Gson 和其他库有更简单的方法来实现这一点,但在这种情况下需要使用 Jettison。

我从文档中了解到我可以做的事情:

Map<String, Map<String, String>> tagsMap = new HashMap<>();
Map<String, String> tags = new HashMap<>();
tags.put("tag1", "value1");
tags.put("tag2", "value2");
tags.put("tag3", "value3");

tagsMap.put("table1", tags);
tagsMap.put("table2", tags);
tagsMap.put("table3", tags);

JSONObject jsonObject = new JSONObject(tagsMap);

System.out.println(jsonObject.toString());

但是 new JSONObject(map) 似乎只适用于 Map 并且对于上面的代码我最终得到了这个不正确的输出:

{"table3":"{tag1=value1, tag2=value2, tag3=value3}","table2":"{tag1=value1, tag2=value2, tag3=value3}","table1":"{tag1=value1, tag2=value2, tag3=value3}"}

我想要的输出应该是适当的JSON内容,像这样:

{"table3":{"tag1":"value1", "tag2":"value2", "tag3":"value3"},"table2":{"tag1":"value1", "tag2":"value2", "tag3":"value3"},"table1":{"tag1":"value1", "tag2":"value2", "tag3":"value3"}}

有什么方法可以做到这一点 ONLY Jettison ?

看来您使用的是旧版本的 jettison,它在 jettison 1.3 及更高版本上运行良好。升级库版本即可正常使用