web-dev-qa-db-ja.com

文字列に関するGSONの問題

    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());

ファイン出力は{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);

罰金ではない出力はJson result is "{test\u003dm\\/m\\/m/m/m/m/m}"

[〜#〜] gson [〜#〜]怒っているのか、それとも私が間違っているのですか? バックスラッシュで何が起きているのか、どこからこれが行われるのかu003dが表示されますか?私はずっと前にこの種のバグが存在することを知っていましたが、解決されました。この問題を解決するにはどうすればよいですか?前もって感謝します。

31
Fahad Ishaque

=記号は\u003d.にエンコードされるため、 disableHtmlEscaping() を使用する必要があります。

使用できます

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

\/\\/問題に変わる場合、解決策は

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

一部の人々はnitpickを好むので、質問に回答を追加します(既に回答済みで正しい回答として選択されている場合でも)...

この質問に対する選択された答えに同意します。次のコードを使用します。

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

@Bajrang Huddaは\ nについて尋ねました...最近この問題にぶつかりました...を使用して解決できました:

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