Você pode evitar que o Gson converta "<" e ">" em seqüências de escape unicode?

127

Notei que o Gson converte a string "<" em uma sequência de escape unicode na saída JSON. Você pode evitar isso de alguma forma ou caracteres como "<" e ">" sempre precisam ser escapados no JSON?

Considere este exemplo que imprime {"s":"\u003c"}; Eu gostaria simplesmente {"s":"<"}.

public static void main(String[] args) {
    Gson gson = new GsonBuilder().create();
    System.out.println(gson.toJson(new Foo()));  
}

static class Foo {
    String s = "<";
}

Contexto: o pedaço de JSON que estou criando não tem nada a ver com páginas HTML ou mesmo JavaScript; é usado apenas para passar certas informações estruturadas para outro software (incorporado em um dispositivo, escrito em C).

Jonik
fonte
2
O GSON tem como padrão fazer isso? Uau. Essa é uma configuração padrão bastante estranha, embora seja perfeitamente legal o que fazer da perspectiva da especificação JSON.
StaxMan
3
Sim, foi surpreendente para mim também. Felizmente, o remédio é fácil quando você sabe onde procurar. :) Caso contrário, após um dia de experiência, acho o Gson uma biblioteca muito limpa e legal, com um ótimo guia do usuário também!
11118 Jonik
6
Isso também acontece com o caractere "=", que se transforma em "\ u003d".
Russell Silva

Respostas:

253

Você precisa desativar o escape de HTML .

Gson gson = new GsonBuilder().disableHtmlEscaping().create();
BalusC
fonte
11
Eu me pergunto por que está ativado por padrão. JSON não tem nada a ver com HTML. As especificações únicos estados "e `\` precisam ser escapado.
21416 Mark Jeronimus
Gente, isso não funcionou para mim. Eu estou usando '' com.squareup.retrofit2: retrofit: 2.3.0 '' && '' com.squareup.retrofit2: converter-gson: 2.3.0 ''. Por favor me ajude.
Mr Code