2016-09-24 16 views
0

AndroidアプリケーションがエスケープされたHTMLとして受け取っているJSONプロパティをデコードしようとしています。私は最新のAndroid Studio IDE(2.2)でJava 8を使用していますが、この問題を解決するためのGoogleのAndroidライブラリまたは既存のJavaコードを見つけることはできません。AndroidでJavaのJSONレスポンスからエスケープされたHTMLマークアップをデコード

私はHTMLを取り除くつもりはないので、HTMLのエスケープを解除してからそのままHTMLをTextViewに表示したいと思います。 HTMLを正しく表示するにはいろいろな方法がありますが、GitHubでUnbescapeというIライブラリを使ってエスケープされたStringからHTMLを抽出する方法はこれまでのところ一つしかありません。私は、JSONプロパティを1つしか持たないのでライブラリを含めなくてもいいと思っていました。

JSONのプロパティは次のように受け取られます:

"HTML":「\ u003cp \ u003e \ u003cu \ u003e \ u003cstrong \ u003eAnotherメッセージの\ u003c /強いの\ u003eの\のu003c/uはu003eの\ u003c/pは\ \ cellpacing = \ "1 \" cellspacing = \ "1 \" style = \ "\" \ n \ n \ u003e \ n \ n \ u003cp \ u003c \ p \ u003e \ n \ n \ u003e \ "幅:100%\" \ u003e \ n \ t \ u003ctbody \ u003e \ n \ t \ t \ u003ctr \ u003e \ n \ t \ t \ t \ u003ctd \ u003easdf \ u003c \ td \ u003e \ n \ t \ t \ t \ u003ctd \ u003easdfa \ u003c/td \ u003e \ n \ t \ t \ u003c/tr \ u003e \ n \ t \ t \ u003ctr \ u003e \ n \ t \ t \ t \ u003ctd \ u003easdf \ u003c/t0 \ u003e \ n \ t \ t \ t \ u003ctd \ u003e \ n \ t \ t \ t \ t0 \ u003c \ t \ u003ctd \ u003easdfa \ u003c/td \ u003e \ n \ t \ t \ t \ u003ctd \ u003esdfasd \ u003c/td \ u003e \ n \ t \ t \ u003c/tr \ u003e \ n \ t \ u003c/tbody \ u003e \ n \ u003c/table \ u003e \ n \ n \ u003cp \ u003e \ u0026#160; \ u003c/p \ u003e \ n "

ご協力いただければ幸いです。前もって感謝します。

+0

JSONパーサーを使用してください。 [AndroidでJSONを解析する方法](http://stackoverflow.com/q/9605913/5221149)を参照してください。 – Andreas

+0

私は明確にすべきです。 Retrofit HTTPライブラリを使用してHTTP応答を受け取ります。レトロフィットRestAdapter.Builder()メソッドを使用してGsonビルダーインスタンスが .setConverter( GsonConverter( GsonBuilder()のようsetConverterビルダーステップを介しとして追加添加..... – Gail

+0

JSON応答は、Javaに変換されます。 POJOを使用しています。この時点では、POJOを実行する必要があります。つまり、解析する必要はありません。これは、プロパティの1つに含まれるHTMLのエスケープ解除です。 HTMLに必要なエスケープ処理を実行する – Gail

答えて

1

JSONオブジェクトのJSONプロパティが表示されていると仮定すると、JSON解析を非常に簡単にテストできます。

コンテンツを含むテキストファイルを作成し、{}で囲んで有効なJSONオブジェクトにします。

{ "HTML": "\u003cp\u003e\u003cu\u003e\u003cstrong\u003eAnother Message\u003c/strong\u003e\u003c/u\u003e\u003c/p\u003e\n\n\u003cp\u003e\u0026#160;\u003c/p\u003e\n\n\u003ctable border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\"\u003e\n\t\u003ctbody\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003easdf\u003c/td\u003e\n\t\t\t\u003ctd\u003easdfa\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003easdf\u003c/td\u003e\n\t\t\t\u003ctd\u003easdfa\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003easdfa\u003c/td\u003e\n\t\t\t\u003ctd\u003esdfasd\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003cp\u003e\u0026#160;\u003c/p\u003e\n" } 

このコードを実行して、テキストファイルを読み取ります。

以下に見られるように、JSONパーサーはすべてをエスケープします。

public class Test { 
    @SerializedName("HTML") 
    String html; 
    public static void main(String[] args) throws Exception { 
     Gson gson = new GsonBuilder().create(); 
     try (Reader reader = new FileReader("test.json")) { 
      Test test = gson.fromJson(reader, Test.class); 
      System.out.println(test.html); 
     } 
    } 
} 

出力

<p><u><strong>Another Message</strong></u></p> 

<p>&#160;</p> 

<table border="1" cellpadding="1" cellspacing="1" style="width:100%"> 
    <tbody> 
     <tr> 
      <td>asdf</td> 
      <td>asdfa</td> 
     </tr> 
     <tr> 
      <td>asdf</td> 
      <td>asdfa</td> 
     </tr> 
     <tr> 
      <td>asdfa</td> 
      <td>sdfasd</td> 
     </tr> 
    </tbody> 
</table> 

<p>&#160;</p> 
+0

ありがとうございました。あなたのソリューションはうまくいきました。@SerializedName( "HTML")アノテーションがありませんでした。優れたテストハーネス....もう一度感謝します。 – Gail