你能避免Gson将"<"和">"转换为Unicode转义序列吗?

156
我注意到在JSON输出中,Gson 将字符串"<"转换成了Unicode转义序列。你能以某种方式避免这种情况吗?或者像"<"和">"这样的字符在JSON中总是需要转义吗?
考虑以下示例,它打印出{"s":"\u003c"} ,我只想要简单的 {"s":"<"}
public static void main(String[] args) {
    Gson gson = new GsonBuilder().create();
    System.out.println(gson.toJson(new Foo()));  
}

static class Foo {
    String s = "<";
}

背景:我正在创建的 JSON 片段与 HTML 页面甚至 JavaScript 没有任何关系,它只是用于向另一 piece of software(嵌入式设备中,使用 C 语言编写)传递某些结构化信息。


4
GSON 默认这样做吗?哇,这是相当奇怪的默认设置,尽管从 JSON 规范的角度来看,这是完全合法的事情。 - StaxMan
4
对我来说,这也很令人惊讶。幸运的是,一旦知道在哪里查找,解决方法就很容易。 :) 除此之外,我使用Gson库的经验只有一天,但我觉得这是一个非常干净、好用的库,并且还有一份很棒的用户指南! - Jonik
7
"="字符也会发生这种情况,变成"\u003d"。" - Russell Silva
2个回答

308
你需要禁用HTML转义
Gson gson = new GsonBuilder().disableHtmlEscaping().create();

16
我想知道为什么它默认开启。JSON和HTML没有任何关系。规范只声明 "\\ 需要被转义。 - Mark Jeronimus
伙计们,这对我没用。我正在使用“com.squareup.retrofit2:retrofit:2.3.0”和“com.squareup.retrofit2:converter-gson:2.3.0”。请帮帮我。 - Mr Code

2
使用“\u0026”替代“&”符号,问题得到了解决。

1
但有时为了可读性和与外部输入数据的兼容性,例如对象反序列化,从此处的[数据源]控制可能是不可能或太昂贵的;这时,合理利用Gson自身的原则机制和配置可能是更好的选择。 - Lancer.Yan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接