2013-01-14 43 views
1

我遇到了問題,我需要您的幫助。Play框架中的Json響應字符編碼

我在服務器上使用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格式,而無需手動這樣做時在視圖中的東西,因爲我有很多的,我必須改變的反應。

回答

1

使用模板渲染JSON字符串是......糟糕的(在這裏我應該完成我的答案,無論如何......)。

JSON序列化器通常需要關心適當的引號,轉義特殊字符,榮譽類型,編碼字符(如果需要)等等......正如我可以看到你的模板不這樣做。

使用模板您需要自己完成所有工作,如果您完全不知道JSON規範,那麼您將被判定爲失敗。這不僅僅像在適當的地方粘貼${message.text} ...

換句話說:你的第二種方法總是比第一種更好。

+0

感謝您的回答。我必須重做我的所有應用程序,但知道正確的方法是很好的。 –

0

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

您需要確保您正在運行Play的JVM也以UTF-8作爲Charset.defaultCharset()運行。

+0

但我的服務器上傳到Heroku服務器。我可以使默認編碼爲UTF-8嗎?怎麼樣? –

0

編譯器和編輯器都應將其編碼設置爲「UTF-8」。 Play Framework和JSON已經使用UTF-8。屬性文件應該編碼爲\u....。錯誤可能在於非Java文件。