返回一个 JSON 对象

returning a JSON object

有没有办法通过 ColdFusion 中的函数 return 一个真正的 JSON 对象? 我当前的解决方案是将查询转换为字符串,然后在另一个 CF 文件中将其转换回 JSON 对象:

<cffunction name="addLicense" access="remote" returntype="string" returnFormat="JSON" httpmethod="POST">
  <cfquery datasource="hostmanager" name="createCustomer">
    SELECT * FROM license
  </cfquery>
  <cfreturn serializeJSON(createCustomer)>
</cffunction>

在ColdFusion2016中我用的是这样的。

deserializeJSON(serializeJSON(createCustomer, 'struct'))

这基本上为您提供了一个结构数组(查询列作为结构键)。

serializeJSON 有多种不同的使用方式

<cfscript>
    myQuery = queryNew("id,name,amount","Integer,Varchar,Integer", 
                [ 
                        {id=1,name="One",amount=15}, 
                        {id=2,name="Two",amount=18}, 
                        {id=3,name="Three",amount=32} 
                ]); 
    writeOutput("The new query is:")
    writeDump(myQuery)
</cfscript>

<cfoutput>
    <h4>Default</h4>
    <p><code>#serializeJSON(myQuery)#</code></p>
    <h4>Row</h4>
    <p><code>#serializeJSON(myQuery, "row")#</code></p>
     <h4>Column</h4>
    <p><code>#serializeJSON(myQuery, "column")#</code></p>
     <h4>Struct</h4>
    <p><code>#serializeJSON(myQuery, "struct")#</code></p>
</cfoutput>

结果为

参见:https://cffiddle.org/app/file?filepath=58f7cee2-dabb-42f8-91ef-7dd41e1691c0/49ad94cb-23e4-4c9c-9986-b7c1d4c15e3a/c818a99e-4476-4625-8bec-657bcfa9b0e2.cfm

您可以使用 returnType="query" 并且该函数将 return 结果采用 JSON 格式。您可能需要使用 <cfcontent type="application/json"> 来确保 returned 内容类型正确。

现在我正在使用这个解决方案 return JSON:

returntype="any" produces="application/json"