SerializeJSON(cfquery)
创建一个如下所示的JSON:
"COLUMNS":["POINT","LOCATION"],"DATA":[["41.322365,-71.679251","Ashaway...
如何仅输出JSON数据?
...即
[["41.322365,-71.679251","Ashaway...
答案 0 :(得分:8)
除非您可以修改序列化查询的代码,否则我认为没有一种方便的方法。否则你将需要使用一些字符串操作。但是,假设您可以访问序列化查询的CF代码,这有点不正统但确实有效:
<!---Serialize and Deserialize the cfquery to shortcut obtaining a Structure--->
<cfset queryAsStruct = DeSerializeJSON(SerializeJSON(cfquery))>
<!---Now serialize the data key of the struct--->
<cfset dataJSON = SerializeJSON(queryAsStruct.data)>
正如我所说的那样,不是最漂亮的......但似乎已经完成了。可能有一种更方便/更好的实践方法将cfquery转换为结构,但是这个方法导致我的代码行数最少。
编辑:只是想解释为什么会这样。由ColdFusion反序列化时的JSON字符串不再被检测为查询对象,只是一个简单的结构,因此&#34; DATA&#34;密钥已创建并已填充。这样你就可以将它作为结构的关键来访问它。当cfquery是一个查询对象时,仍然是一个&#34; struct&#34;对象的类型,它有特殊的考虑因素,阻止你直接访问数据键(据我所知)。
答案 1 :(得分:0)
示例查询
q = QueryNew( '' );
point = [ "41.322365,-71.679251" ];
location = [ "Ashaway" ];
QueryAddColumn( q,"point",point );
QueryAddColumn( q,"location",location );
CF10 + (使用&#34;查询中的行&#34;语法)
data = [];
for( row in q ) {
// append array of two values
ArrayAppend( data, [ row.point, row.location ] );
}
data = SerializeJSON( data );
<强> CF9.01 强>
data = [];
for( row=1; row <= q.recordcount; row++ ) {
rowdata = [];
ArrayAppend( rowdata,q.point[ row ] );
ArrayAppend( rowdata,q.location[ row ] );
ArrayAppend( data,rowdata );
}
data = SerializeJSON( data );
<强>结果:强>
[["41.322365,-71.679251","Ashaway"]]
答案 2 :(得分:0)
让我们假设您的JSON字符串已经通过并且ajax调用了&#34;响应&#34;变量。所以我们有response.COLUMNS和response.DATA。
通过使用列名并查找其索引,您可以精确定位给定行的数据。从那里你可以做任何你需要的事。
var point;
var location;
for(i=0; i<response.COLUMNS.length; i++){
point=response.DATA[i][response.COLUMNS.indexOf('POINT')];
location=response.DATA[i][response.COLUMNS.indexOf('LOCATION')];
}