2012-04-11 163 views
0

我使用的图表库需要输入看起来像某种格式。这种格式看起来像JSON,但它不是,这里我分享一些数据,以获得有关格式的想法:将数据格式化为JSON,格式为

[{ 
        year: 2005, 
        income: 23.5, 
        expenses: 18.1 
       }, { 
        year: 2006, 
        income: 26.2, 
        expenses: 22.8 
       }, { 
        year: 2007, 
        income: 30.1, 
        expenses: 23.9 
       }, { 
        year: 2008, 
        income: 29.5, 
        expenses: 25.1 
       }, { 
        year: 2009, 
        income: 24.6, 
        expenses: 25.0 
       }]; 

你可以看到在this link完整的例子。 在我的第一个测试中,我使用了String.concat(anotherString),但我向你保证它不舒服。那么是否有任何提供这种格式的Java API? 在此先感谢。

+0

这与JSON足够接近,我敢打赌它会接受JSON。唯一导致无效JSON的是关键名称周围缺少引号。 – Corbin 2012-04-11 21:58:04

+0

这看起来像JavaScript,而不是JSON。如果这是真的,你应该能够在它的地方使用JSON并让所有的东西都能正常工作。 – 2012-04-11 21:58:21

+1

围绕关键名称的引号缺乏来自Javascript。这是直接从一个JavaScript例子。如果它**需要这种格式,只需使用json格式化程序然后执行jsonString.replace(“\”“,”“) – Joel 2012-04-11 21:59:06

回答

1

好吧,该格式和JSON之间的唯一区别看起来就像只需要从字符串中删除双引号。所以data.replaceAll(“\”“,”“);应该做这个工作

但实际上,阅读这个例子,它应该接受有效的JSON,你应该尝试使用$ .ajax()方法,会是什么样子:

AmCharts.ready(function() {$.ajax({ 
     url: '/mydata/', 
     dataType: 'json', 
     data: undefined, 
     success: function(chartData) { 
       // SERIAL CHART 
       chart = new AmCharts.AmSerialChart(); 
       chart.dataProvider = chartData; 
       chart.categoryField = "year"; 

       // AXES 
       // category 
       var categoryAxis = chart.categoryAxis; 
       categoryAxis.gridAlpha = 0.1; 
       categoryAxis.axisAlpha = 0; 
       categoryAxis.gridPosition = "start"; 

       // value 
       var valueAxis = new AmCharts.ValueAxis(); 
       valueAxis.stackType = "regular"; 
       valueAxis.gridAlpha = 0.1; 
       valueAxis.axisAlpha = 0; 
       chart.addValueAxis(valueAxis); 

       // GRAPHS 
       // first graph  
       var graph = new AmCharts.AmGraph(); 
       graph.title = "Europe"; 
       graph.labelText = "[[value]]"; 
       graph.valueField = "europe"; 
       graph.type = "column"; 
       graph.lineAlpha = 0; 
       graph.fillAlphas = 1; 
       graph.lineColor = "#C72C95"; 
       chart.addGraph(graph); 

       // second graph    
       graph = new AmCharts.AmGraph(); 
       graph.title = "North America"; 
       graph.labelText = "[[value]]"; 
       graph.valueField = "namerica"; 
       graph.type = "column"; 
       graph.lineAlpha = 0; 
       graph.fillAlphas = 1; 
       graph.lineColor = "#D8E0BD"; 
       chart.addGraph(graph); 

       // third graph        
       graph = new AmCharts.AmGraph(); 
       graph.title = "Asia-Pacific"; 
       graph.labelText = "[[value]]"; 
       graph.valueField = "asia"; 
       graph.type = "column"; 
       graph.lineAlpha = 0; 
       graph.fillAlphas = 1; 
       graph.lineColor = "#B3DBD4"; 
       chart.addGraph(graph); 

       // LEGEND     
       var legend = new AmCharts.AmLegend(); 
       chart.addLegend(legend); 

       // WRITE 
       chart.write("chartdiv"); 
      }); 
     } 
    }); 

(对不起,我远远擅长编写JavaScript,但我认为这个想法是存在的),而且,也许amCharts的API,使您能够direcly检查本地URL。然后,您只需将您的JSON数据作为REST呼叫路由。

+0

对不起@zmo,但我不明白你的意思是什么$ .ajax()方法? – 2012-04-11 22:10:05

+0

好吧,这个想法是使用jquery的$ .ajax()方法调用,它可以从客户端端点的javascript服务中下载并反序列化某些服务器的JSON数据。唯一的事情是,JavaScript代码往往是非常丑陋的(imho):) – zmo 2012-04-11 22:13:34

+0

好吧,我明白了。如果我在客户端使用本地javascript,这将是一个好主意,但在我的情况下,我使用的GWT迫使我使用它的远程调用方法。谢谢你的任何帮助。 – 2012-04-11 22:18:17

0

chk此API的数据相关博客页面

http://blog.amcharts.com/2011/03/amcharts-javascript-tutorials-part-2.html 

我认为本教程讲述所有的处理这个API中的数据,有许多的例子和代码一些本质gritties网页摘要

0

解决方法很简单:

变种chartData = EVAL(json_data);

最好的问候