2016-02-11 116 views
0

我有一个servlet运行的是一个来自DB上的doGet提取数据,并用JSON格式化字符串响应填充Highchart.js时间序列图:格式化JSON用于highchart

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     String json = ""; 
     String sDate = request.getParameter("start"); 
     String eDate = request.getParameter("end"); 
     String app = request.getParameter("app"); 
     String env = request.getParameter("env"); 


      if (sDate != null && eDate != null) { 
       Timestamp from = TimestampUtils.parseTimestamp(sDate, null); 
       Timestamp to = TimestampUtils.parseTimestamp(eDate, null); 

       try { 
        throughPutList = interop.getThroughputEntriesInTimespan(env, app, from, to); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       int counter = 1; 
       if (throughPutList != null) { 
        json += "["; 
       } 
       assert throughPutList != null; 
       for (ThroughputEntry chartModel : throughPutList) { 

        json += "[" + (chartModel.getRetrieved().getEpochSecond()* TimestampUtils.MILLIS_PER_SECOND + "," + chartModel.getThroughput() + "]"); 

        if (counter < throughPutList.size()) { 
         json += ","; 
        } 
        counter++; 
       } 
       if (throughPutList != null) { 
        json += "]"; 
       } 
       if (throughPutList == null) { 
        json = "No record found"; 
       } 
      } else { 
       json = "Date must be selected." + "App : " + app + " " + eDate; 

      } 
      response.getWriter().write(json); 
     } 
} 

我是新来javascripthighchartJSON,是有可能这个细化到也许用实际JSON对象/数组,而不是一个字符串,或者是我有一个合理的方式来解决这个方法。

+0

也许你可以使用,可以将输入到JSON Java中,库(例如:GSON或杰克逊)。如果 许多advdantages您使用此梅索德:Java对象的使用100%,不管你​​忘记了“,或者如果您忘记了关键 我尽量给你在几分钟内小码 –

+0

我的想法期运用之一的。我可以使用这些库将它解析成'highchart.js'可以理解的'JSON'格式 – Johntk

+0

我刚刚验证了高层图所需的json字符串的格式,我同意你的看法,没有必要使用这些librairies因为没有必要有键和值。 因此,我建议,让您的代码,但也有一些干净要做。 使用StringBuilder吨CONCAT值这将是更好的性能,当你的名单将是更大更多 尝试用请求初始化变量: 例如:String app = request.get参数(“应用程序”)? request.getParameter(“app”):“value”; –

回答

0

您构建用手JSON字符串它运行在有结果字符串语法错误的风险。既然你只是生成数组数组,这个风险似乎是可控的。否则,你会想使用类似于所有常用JSON库提供的JSONWriter

一个小的性能改进将使用StringBuilder而不是String变量json

我会改善错误处理。如果找不到数据或参数丢失,您将返回错误消息。

在第一种情况下,我只想返回空数组,并让客户搞清楚数据是空的。

如果所需的参数缺少我会用HTTP错误400(错误请求)回答:

response.sendError(400); 

如果检索数据时发生运行时错误,我不会吞下例外,但发送内部服务器错误(500)并记录异常。