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}
 ] }

我尝试使用 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 格式而无需手动操作,因为我有很多必须更改的响应。

4

3 回答 3

1

使用模板来呈现 JSON 字符串是......不好(无论如何,我应该在这里完成我的答案......)。

JSON 序列化程序通常会处理正确的引号、转义特殊字符、尊重类型、编码字符(如果需要)等...我可以看到您的模板没有这样做。

使用模板您需要自己做所有事情,如果您不完全了解 JSON 规范,您将被判失败。这不仅仅是粘贴${message.text}在适当的位置...

换句话说:你的第二种方法总是比第一种更好。

于 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 回答