2014-07-21 24 views
2

我有一個API我的工作,我需要能夠發送申請人,存儲就像在一個表中的純文本的求職信。我有一個函數抓取文本如下。在返回文本之前是否必須使用SerializeJSON(coverlettertext)?爲了它被消耗並且在另一端獲得正確的數據。請指教。與returnFormat發送JSON格式的純文本的API web服務ColdFusion的

<cffunction name="query1" access="remote" returnformat="JSON" output="true"> 
<cfquery name="local.cover_letter" datasource="#variables.dsn#"> 
       SELECT cover_letter 
        FROM table1 
       WHERE userid = <cfqueryparam cfsqltype="cf_sql_integer" value="12345" /> 
        AND jobid = <cfqueryparam cfsqltype="cf_sql_integer" value="456" /> 
      </cfquery> 

        <cfif local.get_cover_letter.recordCount> 
          <cfreturn local.cover_letter/> 
        </cfif> 
</cffunction> 
+1

這取決於消費功能/服務的要求。如果它想要JSON,那麼是的。 –

+1

既然你的參數中有returnformat =「JSON」,那麼是的,你應該使用serializeJSON。你的消費者是否期望JSON? – WillardSolutions

+0

你不應該需要'輸出=「真」'在函數BTW,因爲它實際上沒有任何輸出,只是返回一些JSON – duncan

回答

4

ColdFusion的功能,其序列爲你,但序列化其ColdFusions格式..它會在其認爲適當採取返回的查詢或結構和序列化。這並不總是預期的格式,因爲它具有一行cols,然後是幾行數據......與每行和每行的colname和value進行比較(CF11允許您選擇序列化格式或右對齊,但僅限於我相信你會手動調用它)。 所以你可以說的返回類型爲查詢,然後格式是JSON,它會爲你做它......這將是JSON,將它與你正在使用的什麼其他取決於服務工作最後是EXPECTING。

如果你需要它以特定的格式,即不ColdFusions,那麼你會希望將ReturnFormat更改爲純,然後返回一個字符串,編碼你怎麼想。

1

從你的問題的情況下,我假設你只得到1個字母。如果我錯了,那會改變我的迴應。也就是說,+1給Gavin,用於確定如果序列化查詢對象,格式將與您所期望的不同。您可以改爲從所需的輸出中創建一個CF結構,然後對其進行序列化。請看下面代碼中的兩個變體。

正如其他人所指出的,這一切都取決於該服務的消費者期待。

<cffunction name="query1" access="remote" returnformat="JSON" output="true"> 
    <cfscript> 
     local.cover_letter = queryNew(
     "cover_letter", 
     "varChar", 
     [ 
      { 
      cover_letter:"This is the text of my letter. It could be much longer" 
      } 
     ] 

     ); 
    </cfscript> 

    <cfif local.cover_letter.recordCount> 
     <cfreturn serializeJson(local.cover_letter)/> 
    </cfif> 
</cffunction> 

<cffunction name="query2" access="remote" returnformat="JSON" output="true"> 
    <cfscript> 
     local.cover_letter = queryNew(
     "cover_letter", 
     "varChar", 
     [ 
      { 
      cover_letter:"This is the text of my letter. It could be much longer" 
      } 
     ] 
     ); 
    </cfscript> 
    <cfif local.cover_letter.recordCount> 
     <cfset local.str = {cover_letter= local.cover_letter.cover_letter} > 
     <cfreturn serializeJson(local.str) /> 
    </cfif> 
</cffunction> 

<cfoutput> 
<h1>query1 output</h1> 
#query1()# 
<h1>query2 output</h1> 
#query2()# 
</cfoutput> 

您的輸出應該是:

QUERY1輸出

{ 「列」: 「COVER_LETTER」], 「DATA」:[「這是我的信的文本可能要長的多 「]]}

QUERY2輸出

{」 COVER_LETTER 「:」 這是我的信的全文這可能是更長的時間「}