我想用Gson将HashMap
转换为JSON字符串,其中一个map的值有双引号。我不希望这些双引号被转义,但当在我的GsonBuilder
中转换为带有disableHtmlEscaping
的JSON字符串时,它仍然会转义双引号
我有一个HashMap,其中包含以下String键和String值
{
"test1":"[{"key1":"value1","key2":"value2"}]"
}
字符串
当我尝试用gson序列化这个Map时,禁用了HTML转义,代码如下:
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
return gson.toJson(map);
型
它返回以下字符串:
{"test1":"[{\"key1\":\"value1\",\"key2\":\"value2\"}]"}
型
还试探着:
- 在序列化之前手动转义字符串
- setPrettyPrinting
- 将map转换为JsonTree,并使用getAsString和toString将其作为String获取
有没有人能帮我弄清楚我做错了什么,以及如何在不转义双引号的情况下将Map转换为字符串?
我希望序列化的Map看起来像
{"test1":"[{"key1":"value1","key2":"value2"}]"}
型
1条答案
按热度按时间z3yyvxxp1#
这是预期的行为,不能禁用。显然,
test1
键的值是一个字符串,所以它包含的任何"
都必须被转义;否则它们会被误解为字符串的结尾。例如,让我们看看你想要的JSON输出:
字符串
这实际上不是有效的JSON。它以以下开头:
{
"test1"
"[{"
您可以在本地编辑器中看到这一点,该编辑器支持JSON验证(例如VS Code)或https://jsonlint.com/。
我假设这里的问题是你传递给
Gson.toJson
的数据。你目前似乎传递了HashMap<String, String>
,但实际上可能想传递HashMap<String, List<...>>
。所以在你使用Gson之前,已经有东西把map值转换成了String。如果你使用
HashMap<String, List<...>>
,那么你会得到(可能想要的)输出:型
(note值前后缺少的
"
)