2013-03-22 27 views
1

我正在使用jquery從一個servlet返回一個基本的JSON對象,這是工作絕對好,但我無法格式化JSON實際上填充圖表。谷歌圖表JSON問題 - Java

這是調用這個servlet代碼:

google.load("visualization", "1", {packages:["corechart"]}); 
google.setOnLoadCallback(drawChart); 
function drawChart() { 

    $.getJSON('SearchServlet', {servletAction: 'getSummary'}, function(json) { 
     var data = new google.visualization.DataTable(json); 
      var chart = new google.visualization.PieChart(document.getElementById('summaryPieChart')); 
      chart.draw(data, {backgroundColor:'#e9f1f4',width: '90%', height: '90%', legend:{position:'none'}, chartArea:{width:"90%",height:"90%"},colors:['#94d784','#d78484']}); 
    }); 

} 

Servlet的一面,我使用創建JSON代碼:

private int positive; 
private int negative; 
private int neutral; 

public DataTable createResultsJSON(){ 
    DataTable data = new DataTable(); 
    ArrayList<ColumnDescription> cols = new ArrayList<ColumnDescription>(); 
    cols.add(new ColumnDescription("summary", ValueType.TEXT, "Summary")); 
    cols.add(new ColumnDescription("result", ValueType.NUMBER, "Result")); 

    data.addColumns(cols); 

    try { 
     data.addRowFromValues("positive", positive, true); 
     data.addRowFromValues("negative", negative, true); 
     data.addRowFromValues("neutral", neutral, true); 
     } catch (TypeMismatchException e) { 
     System.out.println("Invalid type!"); 
     } 
     return data; 
} 

將其轉化爲一個使用JSON:

String resultJson = new Gson().toJson(createResultsJSON()); 

的結果的一個例子JSON是:

{ 
"columns":[ 
{"id":"summary","type":"TEXT","label":"Summary","pattern":""}, 
{"id":"result","type":"NUMBER","label":"Result","pattern":""}], 
"columnIndexById":{"result":1,"summary":0}, 
"rows":[ 
{"cells":[{"value":{"value":"positive"}},{"value":{"value":362.0}}]}, 
{"cells":[{"value":{"value":"negative"}},{"value":{"value":302.0}}]}, 
{"cells":[{"value":{"value":"neutral"}},{"value":{"value":349.0}}]}], 
"warnings":[] 
} 

然而,根據谷歌圖JSON的規格,它應該是應該像類似以下內容:

{ 
"cols": [ 
    {"id":"","label":"Topping","pattern":"","type":"string"}, 
    {"id":"","label":"Slices","pattern":"","type":"number"} 
    ], 
"rows": [ 
    {"c":[{"v":"Mushrooms","f":null},{"v":3,"f":null}]}, 
    {"c":[{"v":"Onions","f":null},{"v":1,"f":null}]}, 
    {"c":[{"v":"Olives","f":null},{"v":1,"f":null}]}, 
    {"c":[{"v":"Zucchini","f":null},{"v":1,"f":null}]}, 
    {"c":[{"v":"Pepperoni","f":null},{"v":2,"f":null}]} 
    ] 

}

我已經嘗試了許多不同的方法來格式化正確的JSON在服務器端,我仍然堅持,我敢肯定這是一個快速和簡單的修復,所以任何幫助表示讚賞。

當查詢獲取的JSON,並試圖處理它,它說:「表沒有列」

感謝

+0

生成的JSON有什麼問題?格式?這並不重要。 – 2013-03-22 13:11:36

+0

無論出於何種原因,當返回JSON數據時,儘管格式看起來幾乎與規範幾乎相同,但Google Charts仍在說「表格沒有列」。 – richardb 2013-03-22 13:17:27

回答

3

創建字符串,而不是JSON。 該字符串放在請求範圍內,並直接在jsp(request.getAttribute())中獲取該字符串;

var data = new google.visualization.DataTable(request.getAttribute()); 

我這樣做,我得到答案..

+0

嗨Suresh,我的應用程序佈局的方式需要jQuery的調用和與JSON的交互,但是你的文章讓我走上了正確的路線,現在我已經很好地解決了這個問題。乾杯! – richardb 2013-03-22 17:39:55

+0

如何從對象創建字符串?請幫助我.. – 2013-09-18 13:21:35

+0

@subhash lamba String ss =「」; for(Object obj:Object){Object [] object =(Object [])obj; String ss = ss + object [0] +「」; – 2013-09-19 10:25:44

0

數據表JSON渲染像下面創建JSON。

JsonNode root = null; 
String json = JsonRenderer.renderDataTable(data, true, false).toString(); 

     try{ 
      JsonParser parser = new JsonFactory().createJsonParser(json) 
       .enable(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES) 
       .enable(JsonParser.Feature.ALLOW_SINGLE_QUOTES); 
       root = new ObjectMapper().readTree(parser); 
      }catch(Exception e){ 
       e.printStackTrace(); 
      } 

return root.toString();

Json將採用google chart api所需的格式。它爲我工作。