0

JSON応答を返す API を呼び出しています。応答を読んでいる間JSON、データにいくつかの特殊文字が含まれている場所がいくつかあります。オブジェクトで応答を読み取るときに、これらの特殊文字を除外したいと考えています。応答は次のJSONようになります。

{"data":[{"title":"PSY - GANGNAM STYLE (\uac15\ub0a8\uc2a4\ud0c0\uc77c) M\/V","content":All rights reserved."}]} 

Java コードは次のとおりです。

BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "ISO-8859-1"), 8);

応答からタイトルキーを読み取ると、これらの特殊文字も表示されますが、これは望ましくありません。どうすればそれらを取り除くことができますか? 他のエンコーディングを指定する必要がありますか?

データソース: http://pipes.yahoo.com/pipes/pipe.run?_id=920adeb2e95c15877e29dc678aa78dd7&_render=json&n=1

4

1 に答える 1

0

これはエンコードの問題 (UTF-8 など) ではなく、JavaScript の構文の問題です。\uac15たとえば、" " は、Unicode 文字 U+AC15 ("강") を表す JavaScript 構文です。これらのエスケープされた文字は、ハングル (韓国語) で書かれた曲の名前です: 「강남스타일」.

Java 文字列にバックスラッシュ エスケープ シーケンスが含まれていても問題ありません。その文字列を JSON リーダーで実行すると、実際のハングル文字を含む JSON オブジェクトが取得されます。


JSONリーダーから間違った出力を得ることについてのあなたのコメントに応えて、それはあなたが使用しているJSONライブラリ(およびそれをどのように使用しているか)に依存しますが、質問では指定しませんでした. 以下は、 Jackson 2.1.0を使用した場合の例です。

public final class JsonTest {
    public static void main(final String[] args) {
        final String json = "\"PSY - GANGNAM STYLE (\\uac15\\ub0a8\\uc2a4\\ud0c0\\uc77c) M\\/V\"";
        System.out.println("JSON: " + json);

        try {
            // ObjectMapper is from Jackson 2.1 databind library.
            final ObjectMapper mapper = new ObjectMapper();
            final String decoded = mapper.readValue(json, String.class);
            System.out.println("Decoded: " + decoded);
        }
        catch (final IOException e) {
            e.printStackTrace();
        }
    }
}
于 2012-11-11T14:35:58.310 に答える