2016-01-22 82 views
-1

這是我的查詢,我把它放在JSON中,然後在表中存儲信息。當我在表格中檢查結果時,我看到輸出結果並沒有給我我想要的東西。我的想法是在每個開始日期和結束日期之間獲取所有日期。我的代碼只給了我結束日期。這裏是我的代碼:如何從cfquery創建JSON?

//Here is my query 
<cfquery name="myQuery" datasource="test"> 
    Select UserID, UserEmail, PickDateTime, DropDateTime 
    From UserInfo 
    Order by PickDateTime 
</cfquery> 

//This is my JSON 
<script> 
    myJSON = { 
    <cfoutput query="myQuery"> 
     <cfloop from="#PickDateTime#" to="#DropDateTime#" index="i" step="#CreateTimeSpan(1,0,0,0)#"> 
      "#currentrow#":{"ID":"#UserID#","date":"#dateformat(i,'mmddyyyy')#","email":"#UserEmail#"}, 
     </cfloop> 
    </cfoutput> 
    } 

//Here is my function that creates the table 
function getData(){ 
    myVar="<table><tr><td>ID</td><td>Date</td><td>Email</td></tr><tbody>" 
    for(key in myJSON){ 
     myVar+= 
      "<tr>"+ 
      "<td>"+myJSON[key].ID+"</td>"+ 
      "<td>"+myJSON[key].date+"</td>"+ 
      "<td>"+myJSON[key].email+"</td>"+ 
      "</tr>" 
    } 
    myVar+="</tbody></table>" 
    document.getElementById('myTable').innerHTML = myVar  
} 
</script> 

,這裏是我的html:

<div id='myTable'></div> 

這裏是我的表,電流輸出:

ID Date   Email 
1 01092016 [email protected] 
2 01112016 [email protected] 
3 01132016 [email protected] 
3 01162016 [email protected] 
4 01182016 [email protected] 
5 01192016 [email protected] 

正如你可以在我的輸出,我看到剛剛結束日期,但我沒有得到日期之間。我應該從開始到結束日期獲取所有日期。如果我的開始日期是2015年1月20日,而我的結束日期是2015年1月24日,我希望在兩者之間有日期。我不確定我的JSON是否正確創建或者我的cfloop中有什麼錯誤。如果有人能幫助解決這個問題,請告訴我。

+1

如果你傾倒你的查詢結果你看到所有你所期望的記錄? –

+0

ColdFusion是否可以真正循環使用日期變量? ''這看起來很可疑 –

+0

@JamesAMohler - 是的,它起作用,因爲日期對象是內部的數字。那麼... *大多數*的作品。當與createTimeSpan結合使用時,索引被轉換爲'java.lang.Double',在某些情況下創建[微妙舍入問題](http://stackoverflow.com/a/29214873/104223)。就個人而言,我避免它,並使用整數循環+日期函數。 – Leigh

回答

3

將ColdFusion數據轉換爲JSON的最簡單方法是使用SerializeJSON()函數。

因爲ColdFusion的支持8. See SerializeJSON

0

請試試這個

SerializeJSON:在data.Returns的 ColdFusion數據轉換成JSON(JavaScript對象符號)表示,它包含一個JSON字符串表示參數值。但如果您使用的是ColdFusion 10: SerializeJSON may results in invalid json

<cfscript> 
    // Create an input string that has two different uses of the "u" character. 
    input = "Hello \u1111 u+2222 world"; 
    // Output the original value. 
    writeOutput(input & "<br />"); 
    // Output the serialized value produced by serializeJson(). 
    // CAUTION: The "u+" string will be accidentally replaced with "\u". 
    writeOutput(serializeJson(input)); 
</cfscript> 

爲了避免這種情況,並使其在任何的ColdFusion版本,你可以做到這一點運行:

<cfscript> 
    input = "\\u+1234 hello \u1111 , \u+2222 , u+2222 world"; 
    writeOutput(input & "<br />"); 
    serializedInput = serializeJson(input); 
    writeOutput(serializedInput & "<br />"); 
    savecontent variable = "pattern" { 
     writeOutput("(?x)"); 
     writeOutput("(^ | [^\\] | (?: \\ \\)+)"); 
     writeOutput("\\u"); 
    } 

    safeOutput = javaCast("string", serializedInput).replaceAll(
     javaCast("string", pattern), 
     javaCast("string", "$1u+") 
    ); 


    writeOutput(safeOutput & "<br />"); 
    writeOutput(deserializeJson(safeOutput)); 
</cfscript> 

REFERENCE