簡體   English   中英

Play框架中的Json響應字符編碼

[英]Json response character encoding in Play Framework

我有問題,需要您的幫助。

我正在使用用於移動應用程序的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}
 ] }

我嘗試使用java方法來正確解析響應,而不是在.json視圖中解析它,並且可以。 那是代碼:

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格式而無需手動進行,因為我必須更改很多響應。

使用模板來呈現JSON字符串是很糟糕的(無論如何,我應該在這里完成答案)。

JSON序列化程序通常會注意正確的引號,轉義特殊字符,榮譽類型,對字符進行編碼(如果需要)等...據我所知,您的模板不會這樣做。

使用模板,您需要自己做所有事情,如果您不完全了解JSON規范,則定罪失敗。 這不只是將${message.text}粘貼在適當的位置...

換句話說:您的第二種方法將永遠比第一種更好。

JSON的默認編碼為UTF-8。 Java的默認編碼取決於語言環境。

您需要確保運行Play的JVM還以Charset.defaultCharset()的形式運行UTF-8。

編譯器和編輯器均應將其編碼設置為“ UTF-8”。 Play框架和JSON已使用UTF-8。 屬性文件應使用\\u....編碼。 該錯誤可能出在非Java文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM