¿Puedes evitar que Gson convierta "<" y ">" en secuencias de escape unicode?

127

Noté que Gson convierte la cadena "<" en una secuencia de escape unicode en la salida JSON. ¿Puede evitar esto de alguna manera, o los caracteres como "<" y ">" siempre tienen que escaparse en JSON?

Considere este ejemplo que imprime {"s":"\u003c"}; Me gustaría simplemente {"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: la pieza de JSON que estoy creando no tiene nada que ver con páginas HTML o incluso JavaScript; solo se usa para pasar cierta información estructurada a otra pieza de software (incrustado en un dispositivo, escrito en C).

Jonik
fuente
2
¿GSON por defecto hace eso? Whoa Esa es una configuración predeterminada bastante extraña, aunque es perfectamente legal hacerlo desde la perspectiva de las especificaciones JSON.
StaxMan
3
Sí, también me sorprendió. Afortunadamente, el remedio es fácil una vez que sabes dónde buscar. :) De lo contrario, después de un día de experiencia con él, creo que Gson es una biblioteca realmente limpia y agradable, ¡con una excelente guía de usuario también!
Jonik
66
Esto también le sucede al carácter "=", que se convierte en "\ u003d".
Russell Silva

Respuestas:

253

Necesita deshabilitar el escape HTML .

Gson gson = new GsonBuilder().disableHtmlEscaping().create();
BalusC
fuente
11
Me pregunto por qué está activado de forma predeterminada. JSON no tiene nada que ver con HTML. Las especificaciones únicos estados "y `\` necesitará ser escapado.
Mark Jeronimus
Chicos, eso no funcionó para mí. estoy usando '' com.squareup.retrofit2: retrofit: 2.3.0 '' && '' com.squareup.retrofit2: converter-gson: 2.3.0 ''. Por favor, ayúdame.
Mr Code