ColdFusion查询页面返回JSON

时间:2015-12-02 19:43:01

标签: json http coldfusion

所以我试图重新设置一个旧的Coldfusion页面,用于内部DBA工具来跟踪长时间运行的查询。

该页面当前以<CFQUERY name="GetLongRunners">进行查询,然后以表格格式显示数据:

<table>
    <tr>
        <td>#GetLongRunners.spid#</td>
        <td>#GetLongRunners.Database#</td>
    </tr>
</table>

等等

我的目标是删除所有显示内容,并且只需发布到此页面,然后使用相同的数据接收JSON。我玩弄了:

jsonData = SerializeJSON(#GetLongRunners#)

同时尝试使用#GetLongRunners.database#更具体,它似乎没有用。该页面显示&#39; jsonData = SerializeJSON(&#39;我收到错误:

  

无法将复杂对象类型转换为简单值。

我是ColdFusion的新手,我正在尝试尽可能地封装这个功能,所以我真的只需要担心发布到这个页面,然后我就可以使用原始的JSON来处理在前端。

我发现的所有示例都以非常不同的方式构建查询,并且这样做似乎超出了我的范围。

我正在想象一种将查询输出序列化为json并将其作为JSON对象发回的简单方法。要么是这样,要么通过循环查询结果来构建数组,然后将其序列化。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

<cfsetting enablecfoutputonly="true">

<!--- logic/calculation --->
<cfset jsonData = SerializeJSON( GetLongRunners )>

<!--- lastly, output the result --->
<cfoutput>#jsonData#</cfoutput>

答案 1 :(得分:1)

如果您使用的是CF7,请尝试JSONUtil.cfc。只需下载CFC并将其安装在Web根目录下的某个位置即可。然后就可以使用了。

在.CFM脚本中,运行查询,创建JSONUtil的实例,然后调用serializeJSON()方法。就是这样。

<cfsetting enablecfoutputonly="true">
<cfquery name="GetLongRunners">.... your query here .... </cfquery>
<cfset util = createObject("component", "path.to.JSONUtil")>
<cfcontent type="application/json" reset="true"> 
<cfoutput>#util.serializeJSON(GetLongRunners)#</cfoutput>

正如亨利指出的那样,以这种方式使用.cfm文件会产生额外的空白区域。请务必在脚本的最顶部包含cfsetting。它将抑制除{/ 1}}标记中包含的内容之外的所有内容的输出。

说实话,我会使用CFC代替,但一次只能使用一件事。如果您有兴趣,this thread有一个使用远程函数以及将查询对象转换为更友好的格式(即结构数组)的示例。