Gsonが「<」と「>」をUnicodeエスケープシーケンスに変換することを回避できますか?


127

GsonがJSON出力で文字列 "<"をUnicodeエスケープシーケンスに変換することに気づきました。これをどうにかして回避できますか、または「<」や「>」などの文字は常に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で書かれた)に渡すために使用されます。


2
GSONはデフォルトでそれを行うのですか?うわあ。これはかなり奇妙なデフォルト設定ですが、JSON仕様の観点からは完全に合法です。
StaxMan 2010年

3
ええ、私も驚きました。幸いなことに、どこを見ればいいのかわかっていれば、簡単に治療できます。:)それ以外の場合は、1日の経験の後、Gsonは本当にクリーンで素晴らしいライブラリであり、優れたユーザーガイドもあります。
Jonik

6
これは「=」文字でも発生し、「\ u003d」に変わります。
Russell Silva、

回答:


253

HTMLエスケープ無効にする必要があります

Gson gson = new GsonBuilder().disableHtmlEscaping().create();

11
なぜデフォルトでオンになっているのかしら。JSONはHTMLとは関係ありません。スペックだけの状態"とエスケープするために`\ 'が必要。
マークジェロニムス2017

みんな、それは私にはうまくいきませんでした。私は '' com.squareup.retrofit2:retrofit:2.3.0 '' && '' com.squareup.retrofit2:converter-gson:2.3.0 ''を使用しています。私を助けてください。
Mr Code
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.