Gson – 自动报价(“)逃避?

我在Java EE服务器上使用GSON为视图提供了一些json。 在某些对象中,我有很长的文本,可以包含任何内容(例如“真是个好消息!”)。

我觉得默认情况下GSON不会转义双引号,因此它不会生成有效的JSON。

有这样做的好方法吗?

也许我不理解你的问题,但是我能够让GSON在没有任何设置或更改的情况下使用引号处理字符串。

import com.google.gson.Gson; public class GSONTest { public String value; public static void main(String[] args) { Gson g = new Gson(); GSONTest gt = new GSONTest(); gt.value = "This is a \"test\" of quoted strings"; System.out.println("String: " + gt.value); System.out.println("JSON: " + g.toJson(gt)); } } 

输出:

 String: This is a "test" of quoted strings JSON: {"value":"This is a \"test\" of quoted strings"} 

也许我不明白你在问什么?

这是一些示例GSON代码:

 final JsonObject obj = new JsonObject(); obj.addProperty("foo", "b\"a\"r"); System.out.println(obj.toString()); 

输出是:

{ “foo” 的: “B \” 一个\ “R”}

(应该是)

所以你要么做错了,要么就是使用古老版本的GSON。 也许您应该展示一些代码?

这就是我为解决这个问题所做的

 private final Gson mGson; { GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(String.class, new EscapeStringSerializer()); mGson = builder.create(); } private static class EscapeStringSerializer implements JsonSerializer { @Override public JsonElement serialize(String s, Type type, JsonSerializationContext jsonSerializationContext) { return new JsonPrimitive(escapeJS(s)); } public static String escapeJS(String string) { String escapes[][] = new String[][]{ {"\\", "\\\\"}, {"\"", "\\\""}, {"\n", "\\n"}, {"\r", "\\r"}, {"\b", "\\b"}, {"\f", "\\f"}, {"\t", "\\t"} }; for (String[] esc : escapes) { string = string.replace(esc[0], esc[1]); } return string; } } 

尝试使用带有DisableHtml转义的setPrettyPrinting。

 Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create(); JsonParser jp = new JsonParser(); JsonElement je = jp.parse(jsonArray.toString()); System.out.println( gson.toJson(je)); 

您可以使用HashMap反序列化未知密钥,而不是它。