我有一个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>
答案 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”:“这是我信中的文字。可能会更长”}