在coldfusion的api webservice中以json格式发送纯文本

时间:2014-07-21 18:40:58

标签: json api coldfusion

我有一个api我正在努力,我需要能够发送申请人的封面信息,它以明文形式存储在表格中。我有一个功能,可以抓取下面的文本。在返回文本之前,我是否必须使用SerializeJSON(coverlettertext)?为了消费它并在另一端获得正确的数据。请指教。

<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>

2 个答案:

答案 0 :(得分:4)

ColdFusion函数与returnFormat,为你序列化它,但它的ColdFusions格式为Serialize ..它将采用返回的查询或结构,并在它认为合适时序列化它。这并不总是预期的格式,因为它有一行cols,然后是几行数据......与每行中的colnames和值相比(CF11允许你选择序列化格式或者你自己的格式,但仅限于你相信我手动调用它。 所以你可以说返回类型是查询,然后格式是json,它会为你做...它将是JSON,它将与你正在使用的服务一起工作,这取决于什么另一端是期待。

如果您需要特定格式,即不是ColdFusions,那么您可能希望将ReturnFormat更改为plain,然后返回一个字符串,按照您想要的方式编码。

答案 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输出

{“COLUMNS”:[“COVER_LETTER”],“DATA”:[[“这是我信中的文字。可能会长得多”]]}

query2输出

{“COVER_LETTER”:“这是我信中的文字。可能会更长”}