Подтвердить что ты не робот

Gson - Автоматическая цитата (") ускользает?

Я использую GSON на моем сервере Java EE, чтобы предоставить некоторые json для просмотра. В каком-то объекте у меня длинный текст, который может содержать что угодно (например, "Что такое" отличная "новость!" ).

Я удивлен, что по умолчанию GSON не избегает двойной кавычки, поэтому она не генерирует действительный JSON.

Есть ли хороший способ сделать это?

4b9b3361

Ответ 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 для десериализации неизвестных ключей.