java - 如何将 java 中的复杂映射序列化为 JSON

标签 java json gson

我在将 map (或列表)序列化为 JSON 时遇到问题。它可以达到任何级别。我正在使用 GSON 将 map 转换为 JSON,但没有得到所需的输出。考虑下面的例子:

Map<String, String> map = new HashMap<String, String>();
map.put("key1", "value1");
map.put("key2", new ArrayList<String>(){{add("value2");add("value3");}});

当我序列化此 map 时,我得到以下输出:

{
"key1" : "value1",
"key2" : "[value2, value3]"
}

当我在 map 中放置 map 时,情况会变得更糟。我想要的输出是:

{
    "key1" : "value1",
    "key2" : ["value2", "value3"]
}

知道如何获得这样的输出吗?我已经尝试过 ObjectMapper 和 GsonBuilder.registerTypeAdapter 但到目前为止还没有成功。

提前致谢。

最佳答案

我认为将 ArrayList 存储在需要字符串的 HashMap 中是无效的。我会说该代码应该失败,但我想它一定会成功,因为它对你来说不会失败,所以我假设正在发生的是,当你将它插入到 HashMap 中时,Java 实际上正在调用 toString( ) 在幕后将其转换为 String。因此,HashMap 中的值实际上并不是一个数组;而是一个数组。从插入的那一刻起,它就是一根绳子。因此,您将丢失无法在下游挽救的信息。

关于java - 如何将 java 中的复杂映射序列化为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27136604/

相关文章:

java - 尝试用java程序减去二进制数小错误

Web 文件夹下的 Java Applet,ClassNotFoundException

java - 使用按钮从另一个类中的数组填充 JTextArea

java - JSON 解析错误 : Can not deserialize instance of java. util.ArrayList 超出 START_OBJECT token

java - JSON 编码损坏?

android - Gson 在 Android Studio 调试器中运行缓慢

java - 在将我的相对布局更改为 Linearlayout 时,它在 TTS 的 textview 上抛出空指针异常

php - 在 PHP 中缓存 JSON 输出

java - 用Gson反序列化Json,在TextViews中显示信息

java - 无法将 Gson JsonObject 转换为 POJO 类