1

問題があり、あなたの助けが必要です。

モバイルアプリに使用する Java の Play Framework v1.2.4 を使用してサーバーで作業していますが、Json 応答に問題があります。

私は常にビューを使用して Json 応答をエンコードしていますが、特殊文字 (ñ、\n、á、é など) を使用すると問題が発生し、モバイル アプリが正しく実行されないことに気付きました。

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

{
  "id":${data[0]},

  "messages": 
  [
      #{list items:data[1], as:'message'}
      {           
           "text":"${message.text}"
      }${message_isLast ? '' : ','
}#{/list}
 ] }

.json ビューではなく、応答を正しく解析するために Java メソッドを使用して実行しようとしましたが、問題ありません。それはコードです:

JsonObject jsonOut = new JsonObject(); 
jsonOut.addProperty("id",conversation.id); 
JsonArray jsonArray = new JsonArray();   

for(int i = 0; i < conversation.messages.size; i++)  {
    Message message = conversation.messages.get(i);
    JsonObject jsonMessage = new JsonObject();
    jsonMessage.addProperty("text", message.text);
    jsonArray.add(jsonMessage); 
}

jsonOut.add("messages", jsonArray); 

renderText(jsonOut);

私の質問は、変更する必要がある応答がたくさんあるため、手動で行うことなく、変数を正しく json 形式に解析するためにビューで何かできるかどうかです。

4

3 に答える 3

1

JSON文字列をレンダリングするためにテンプレートを使用するのは...悪いです(とにかく、ここで答えを終わらせる必要があります...)。

JSONシリアライザーは通常、適切な引用符を処理し、特殊文字をエスケープし、タイプを尊重し、文字をエンコードします(必要な場合)など...私が見ることができるように、あなたのテンプレートはそうしません。

テンプレートを使用すると、すべてを自分で行う必要があり、JSON 仕様を完全に理解していないと失敗することになります。適当なところに貼るだけじゃない${message.text}

言い換えれば、2 番目のアプローチは常に最初のアプローチよりも優れています。

于 2013-01-14T23:50:38.740 に答える
0

JSON のデフォルトのエンコーディングは UTF-8 です。Java のデフォルトのエンコーディングはロケールに依存します。

Play を実行している JVM も Charset.defaultCharset() として UTF-8 を実行していることを確認する必要があります。

于 2013-01-14T10:54:44.213 に答える
0

コンパイラとエディタの両方で、エンコーディングを「UTF-8」に設定する必要があります。Play フレームワークと JSON はすでに UTF-8 を使用しています。プロパティ ファイルは\u....エンコードする必要があります。エラーは、Java 以外のファイルにある可能性があります。

于 2013-01-14T22:46:40.027 に答える