因此,我正在使用HighSlide和ColdFusion制作饼图。
为了简单起见,对于数据,它期望这样的字符串:
data: [{name: 'Jane',y: 13}, {name: 'John',y: 23}, {name: 'Joe',y: 19}]
我要做的就是遍历我的查询结果并创建一个像这样的字符串:
<cfloop query="getAreaCounts">
<cfset areaList = listAppend(areaList, "{name: '#name#',y: #y#}")>
</cfloop>
我知道必须有一种更容易/更智能的方法吧?由于这是JSON数据,因此我认为我可以这样做:
<cfoutput>#SerializeJSON(getAreaCounts)#</cfoutput>
但这返回了一个如下的JSON字符串,highcharts不会处理:
{"COLUMNS":["Y","NAME"],"DATA":[[8,"Area1"],[7,"Area2"],[1,"Area3"],[1,"Area4"]]}
向我指出正确方向的任何帮助都会很棒。我是否需要更深入地研究JSON-Howto?
最佳答案
您将需要将查询转换为结构数组,然后在该数组上运行serializeJSON()
。
下面是一种在处理大量查询和JSON时经常使用的方法。我认为我是从Ben Nadel的网站上获得的,然后将其转换为cfscript。。发布此答案后,我将尝试跟踪该博客文章。
public array function queryToArray( required query qry ) {
var columns = arguments.qry.getColumnNames();
var ofTheJedi = [];
for( var i = 1; i LTE qry.recordCount; i++ ) {
var obj = {};
for( var k = 1; k LTE arrayLen( columns ); k++ ) {
structInsert( obj, columns[ k ], arguments.qry[ columns[ k ] ][ i ] );
}
arrayAppend( ofTheJedi, obj );
}
return ofTheJedi;
}
因此,在您的情况下,您将执行以下操作:
<cfset myJSON = queryToArray( getAreaCounts ) />
<cfoutput>#serializeJSON( myJSON )#</cfoutput>
编辑:这是本的启发上述方法的本的博客文章:http://www.bennadel.com/blog/124-Ask-Ben-Converting-a-Query-to-an-Array.htm