【问题标题】:How to serialize a complex map in java to JSON如何将java中的复杂映射序列化为JSON
【发布时间】:2014-11-25 21:02:21
【问题描述】:

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

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

当我序列化这张地图时,我得到以下输出:

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

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

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

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

提前致谢。

【问题讨论】:

  • Map&lt;String, Object&gt; map = new HashMap&lt;&gt;(); map.put("key1", "value1"); map.put("key2", Arrays.asList("value2", "value3")); String json = new Gson().toJson(map) 工作正常。

标签: java json gson


【解决方案1】:

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

【讨论】:

  • 棒棒哒先生!该地图是从程序动态生成的,并且在某些时候,在将列表放入地图时使用了 toString()。我删除了 toString() ,现在代码可以正常工作了!感谢您的精彩回复!
  • 是的,我的地图属于 而不是 。我在发布问题时犯了一个错误。我应该说是因祸得福。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
  • 2021-11-13
  • 2021-09-18
  • 2017-04-13
  • 1970-01-01
相关资源
最近更新 更多