你能避免 Gson 将“<”和“>”转换为 unicode 转义序列吗?

Can you avoid Gson converting "<" and ">" into unicode escape sequences?

提问人:Jonik 提问时间:11/11/2010 更新时间:3/4/2022 访问量:49431

问:

我注意到 Gson 将字符串“<”转换为 JSON 输出中的 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 无关;它只是用于将某些结构化信息传递给另一个软件(嵌入在设备中,用 C 语言编写)。

Java JSON gson

评论

4赞 StaxMan 11/11/2010
GSON 是否默认这样做?哇。这是相当奇怪的默认设置,尽管从JSON规范的角度来看是完全合法的。
4赞 Jonik 11/11/2010
是的,这也让我感到惊讶。幸运的是,一旦您知道去哪里看,补救措施就很容易了。:)否则,经过一天的体验,我发现 Gson 是一个非常干净、漂亮的图书馆,还有一个很棒的用户指南
7赞 Russell Silva 5/5/2011
这也发生在“=”字符上,该字符将变成“\u003d”。

答:

308赞 BalusC 11/11/2010 #1

您需要禁用 HTML 转义

Gson gson = new GsonBuilder().disableHtmlEscaping().create();

评论

16赞 Mark Jeronimus 2/16/2017
我想知道为什么它默认处于打开状态。JSON 与 HTML 无关。规范仅声明,并且需要对“\”进行转义。"
0赞 Mr Code 4/4/2018
伙计们,这对我不起作用。我正在使用''com.squareup.retrofit2:retrofit:2.3.0''&'com.squareup.retrofit2:converter-gson:2.3.0''。请帮帮我。
2赞 ROOPA P D 3/4/2022 #2

Ampasand 符号被替换为 \u0026 ,通过使用它得到了解决。

评论

1赞 Lancer.Yan 3/4/2022
但有时,为了可读性和与外部输入数据的兼容性,例如对象的反序列化,此处的 [数据源] 控制可能是不可能的或成本太高;这一次,合理运用Gson自身的原理机制和配置可能是更好的选择。