我在Java EE服务器上使用GSON为视图提供了一些json。 在某些对象中,我有很长的文本,可以包含任何内容(例如“真是个好消息!”)。
我认为默认情况下GSON不会转义双引号,因此它不会生成有效的JSON。
这样做有好办法吗?
答案 0 :(得分:12)
也许我不理解你的问题,但我能够让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"}
也许我不明白你在问什么?
答案 1 :(得分:8)
以下是一些示例GSON代码:
final JsonObject obj = new JsonObject();
obj.addProperty("foo", "b\"a\"r");
System.out.println(obj.toString());
输出是:
{ “foo” 的: “B \” 一个\ “R”}
(应该是)
所以你要么做错了,要么就是使用古老版本的GSON。也许您应该展示一些代码?
答案 2 :(得分:7)
这就是我解决的问题
private final Gson mGson;
{
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(String.class, new EscapeStringSerializer());
mGson = builder.create();
}
private static class EscapeStringSerializer implements JsonSerializer<String> {
@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;
}
}
答案 3 :(得分:6)
尝试使用带有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));
答案 4 :(得分:-2)
您可以使用HashMap反序列化未知密钥,而不是它。