2013-06-27 33 views
3

下面的代码返回的JSON谷歌图表谷歌图表API JSON无效

public static DataTable generateDataTable(){ 
     // Create a data table, 
     DataTable data = new DataTable(); 
     ArrayList cd = new ArrayList(); 
     cd.add(new ColumnDescription("name", ValueType.TEXT, "Animal name")); 
     cd.add(new ColumnDescription("link", ValueType.TEXT, "Link to wikipedia")); 
     cd.add(new ColumnDescription("population", ValueType.NUMBER, "Population size")); 
     cd.add(new ColumnDescription("vegeterian", ValueType.BOOLEAN, "Vegetarian?")); 

     data.addColumns(cd); 

     // Fill the data table. 
     try { 
      data.addRowFromValues("Aye-aye", "http://en.wikipedia.org/wiki/Aye-aye", 100, true); 
      data.addRowFromValues("Sloth", "http://en.wikipedia.org/wiki/Sloth", 300, true); 
      data.addRowFromValues("Leopard", "http://en.wikipedia.org/wiki/Leopard", 50, false); 
      data.addRowFromValues("Tiger", "http://en.wikipedia.org/wiki/Tiger", 80, false); 
     } catch (TypeMismatchException e) { 
      System.out.println("Invalid type!"); 
     } 


     return data; 
} 

public static void main(String []args){ 
    String json = JsonRenderer.renderDataTable(generateDataTable(), false, false).toString(); 
    System.out.println(json); 
} 

,但返回的JSON

{cols:[{id:'name',label:'Animal name',type:'string',pattern:''},{id:'link',label:'Link to wikipedia',type:'string',pattern:''},{id:'population',label:'Population size',type:'number',pattern:''},{id:'vegeterian',label:'Vegetarian?',type:'boolean',pattern:''}]} 

当粘贴到http://jsonlint.com/

无效而且是什么在返回的json中显示的模式值{id:'name',label:'Animal name',type:'string',**pattern:''**}

+2

这是报告给谷歌 – PhilippeGeek

+0

错误报告中的错误:http://code.google.com/p/google-visualization-爪哇/问题/细节?ID = 12 –

回答

2

感谢您的帮助球员。

我解决它通过使用杰克逊,可引用未加引号键

import org.codehaus.jackson.JsonFactory; 
import org.codehaus.jackson.JsonNode; 
import org.codehaus.jackson.JsonParser; 

JsonNode root = null; 
String json = JsonRenderer.renderDataTable(generateDataTable(), 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){ 
       logger.error(e.getMessage()); 
      } 

     response.getWriter().println(root.toString()); 
2

什么Google发送给您的是JavaScript object而不是JSON

你需要想出一个办法来stringfyJavaScript objectJSON

看看this问题的答案。它可能会帮助你。