Gson - Автоматическая цитата (") ускользает?
Я использую GSON на моем сервере Java EE, чтобы предоставить некоторые json для просмотра.
В каком-то объекте у меня длинный текст, который может содержать что угодно (например, "Что такое" отличная "новость!" ).
Я удивлен, что по умолчанию GSON не избегает двойной кавычки, поэтому она не генерирует действительный JSON.
Есть ли хороший способ сделать это?
Ответы
Ответ 1
Возможно, я не понимаю ваш вопрос, но мне удалось заставить 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"}
Может быть, я не понимаю, о чем вы спрашиваете?
Ответ 2
Вот пример кода GSON:
final JsonObject obj = new JsonObject();
obj.addProperty("foo", "b\"a\"r");
System.out.println(obj.toString());
Выход:
{ "Foo": "б \" а\ "г" }
(как и должно быть)
Итак, либо вы делаете что-то неправильно, либо используете древнюю версию GSON. Возможно, вам следует показать код?
Ответ 3
Вот что я сделал, чтобы решить эту проблему.
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;
}
}
Ответ 4
Попробуйте использовать setPrettyPrinting с отключением DisableHtml.
Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
JsonParser jp = new JsonParser();
JsonElement je = jp.parse(jsonArray.toString());
System.out.println( gson.toJson(je));
Ответ 5
Вместо этого вы можете использовать HashMap для десериализации неизвестных ключей.