web-dev-qa-db-fra.com

Problème GSON avec String

    String s = "m\\"+"/m\\/m/m/m/m/m";

    LinkedHashMap<String, String> hm = new LinkedHashMap<>();

    hm.put("test", s);

    System.out.println(hm+"  Hash map = "+hm.toString());

La sortie fine est {test=m\/m\/m/m/m/m/m} Hash map = {test=m\/m\/m/m/m/m/m}

    String s2 = new Gson().toJson(hm.toString());

    System.out.println("Json result is "+s2);

Pas très bien La sortie est Json result is "{test\u003dm\\/m\\/m/m/m/m/m}"

Est-ce queGSONdevient fou ou est-ce quelque chose que je fais mal? Que se passe-t-il avec Back Slashes et d'où vient ce u003d? Je savais qu'il existait un bogue de cette nature il y a longtemps, mais il a été résolu. Comment puis-je résoudre ce problème? Merci d’avance.

26
Fahad Ishaque

Le signe = est encodé en \u003d.. Vous devez donc utiliser disableHtmlEscaping () .

Vous pouvez utiliser 

Gson gson = new GsonBuilder().disableHtmlEscaping().create();
String s2 = gson.toJson(hm.toString());

Pour que \/ devienne un problème \\/, la solution est 

s2.replace("\\\\", "\\");
68
NINCOMPOOP

Etant donné que certaines personnes aiment tatouer, je vais ajouter la réponse à la question (même si la réponse a déjà été donnée et choisie comme bonne réponse) ... 

Je suis d'accord avec la réponse choisie à cette question, utilisez le code suivant: 

Gson gson = new GsonBuilder().disableHtmlEscaping().create();
String s2 = gson.toJson(hm.toString());
s2.replace("\\\\", "\\");

@Bajrang Hudda a posé des questions sur\n ... j'ai récemment rencontré ce problème ... J'ai pu le résoudre en utilisant: 

Gson gson = new Gson();
String json = (gson.toJson(data)).replaceAll("\\\\n", "\\n");
0
Nicholas Panella