2015-12-02 75 views
2

所以我試圖重新利用舊的ColdFusion頁的內部DBA工具來跟蹤長時間運行的查詢。ColdFusion的查詢頁面返回JSON

頁目前並查詢爲<CFQUERY name="GetLongRunners">,然後顯示在一個表格式的數據:

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

等,等

我的目標是要去掉所有的顯示的東西,能夠簡單地發佈到此頁面,然後用相同的數據接收JSON。我打得四處:

jsonData = SerializeJSON(#GetLongRunners#) 

,試圖更具體以#GetLongRunners.database#一起,它似乎並沒有工作。該頁面顯示「jsonData = SerializeJSON(」我得到一個錯誤:

Complex object types cannot be converted to simple values.

我很熟悉ColdFusion,並正嘗試封裝這個功能盡我所能,所以我真的只需要擔心關於張貼到這個頁面,然後我可以得到原始的JSON在前端工作。

我發現的所有示例,以非常不同的方式構建查詢,並且它似乎超出我的範圍這種方式。

我描繪出了一個簡單的方式來串行化查詢輸出爲JSON並將其發送回作爲JSON對象。如果不是這樣,或建立通過循環第一個數組粗略查詢的結果,然後序列化。

任何想法?

謝謝!

回答

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。這將抑制來自一切輸出除了內容包裹在<cfoutput>標籤。

說實話我會用CFC這個代替,但在時間的一件事。如果您有興趣,this thread有一個使用遠程函數的例子,並將查詢對象轉換爲更友好的格式,即結構數組。

1
<cfsetting enablecfoutputonly="true"> 

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

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

剛剛發現這個盒子仍然在CF 7>上。< – Jacob

+1

有一些CFCs可以將Coldfusion對象序列化爲JSON,如http://svn.riaforge.org/cfjson/trunk/cfjson.cfc可能想要遍歷查詢並構建一個數組,這在Javascript方面可能更容易處理。 –

+1

@Jacob - Ouch。試試[這裏提到JSONUtil.cfc(http://stackoverflow.com/questions/25190654/how-to-parse-json-returned-in-coldfusion/25252656#25252656)。 (編輯)我同意Bardware關於查詢。默認結構有點笨拙,但是......首先讓它使用普通的vanilla查詢對象。然後調整它。 – Leigh