Можно ли избежать преобразования Gson «<» и «>» в ​​escape-последовательности Unicode?

127

Я заметил, что Gson преобразует строку «<» в escape-последовательность Unicode в выводе JSON. Можете ли вы как-то избежать этого, или символы типа «<» и «>» всегда нужно экранировать в 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).

Jonik
источник
2
GSON по умолчанию делает это? Вау. Это довольно странная настройка по умолчанию, хотя с точки зрения спецификации JSON это вполне законно.
StaxMan
3
Да, меня тоже это удивило. К счастью, лекарство легко, если знать, где искать. :) В остальном, поработав с ней один день, я нахожу Gson действительно чистой, красивой библиотекой, а также отличным руководством пользователя !
Jonik
6
То же самое происходит с символом «=», который превращается в «=».
Рассел Сильва

Ответы:

253

Вам нужно отключить экранирование HTML .

Gson gson = new GsonBuilder().disableHtmlEscaping().create();
BalusC
источник
11
Интересно, почему он включен по умолчанию. JSON не имеет ничего общего с HTML. В спецификации указано только, что "нужно экранировать `\`.
Марк Иеронимус
Ребята, у меня это не сработало. Я использую "com.squareup.retrofit2: retrofit: 2.3.0" && "com.squareup.retrofit2: converter-gson: 2.3.0". Пожалуйста, помогите мне.
Мистер Код