2016-02-11 87 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)並記錄異常。