json - 如何从类型为 "application/json"的 CFFUNCTION 创建输出?

标签 json coldfusion cfml cffunction

我有一个创建包含 JSON 的输出字符串的 cfc。有效载荷很好,但接收它的人告诉我数据是以 text/html 形式传入的,他的程序无法将其识别为有效,因为它需要是 application/json。
所以我修改了我的 CFFUNCTION 语句中的参数,并构建了一个小测试程序,上面写着:

 <cffunction name="Test" httpmethod="get" returntype="JSON" output="yes" access="remote">
    <cfset JSON='{"Test": "A"}'>
    <cfreturn JSON>
    </cffunction>
但是当我远程执行这个 cfc 时,我收到错误消息“从测试函数返回的值不是 JSON 类型”。
这应该很容易,但我看不出我需要做什么才能返回具有 application/json 类型的 JSON 字符串。

最佳答案

您的第一个问题是 returntype="JSON" - 看起来你很困惑returntypereturnformat .有多种方法可以实现您的目标,例如,每种方法都会返回相同的结果:

<!--- Function returns a struct, ask CF to convert it to JSON using returnformat: --->
<cffunction name="Test2" returntype="struct" returnformat="JSON" output="false" access="remote">
    <cfset var myStruct={"Test"="A", "foo"="bar"} />
    <cfreturn myStruct />
</cffunction>

<!--- Function uses a struct, but serializes as a JSON string before returning --->
<cffunction name="Test3" returntype="string" returnformat="plain" output="false" access="remote">
    <cfset var myStruct={"Test"="A", "foo"="bar"} />
    <cfreturn SerializeJSON(myStruct)>
</cffunction>

<!--- Same as above but another variation of struct notation. 
    Note that most CF environments will convert unquoted key names to uppercase 
    unless you enable serialization.preserveCaseForStructKey at application or CF Admin level --->
<cffunction name="Test4" returntype="string" returnformat="plain" output="false" access="remote">
    <cfset var myStruct=structNew() />
    <cfset myStruct['Test'] = "A" />
    <cfset myStruct['foo'] = "bar" />
    <cfreturn SerializeJSON(myStruct) />
</cffunction>

<!--- Manually build the JSON string yourself from scratch, beware of encoding/escaping issues --->
<cffunction name="Test5" returntype="string" returnformat="plain" output="false" access="remote">
    <cfset var myJSONString='{"Test":"A","foo":"bar"}' />
    <cfreturn myJSONString />
</cffunction>
请注意,仅上述内容不会将内容类型响应头设置为 application/json ,如果您的来电者真的关心这一点,那么您将需要以下内容:<cfheader name="Content-Type" value="application/json; charset=utf-8" />...但是 The value returned from the Test function is not of type JSON您所指的错误是 CF 运行时错误,而不是浏览器/ajax 错误。该错误的全文通常是:The value returned from the Test function is not of type JSON. If the component name is specified as a return type, it is possible that either a definition file for the component cannot be found or is not accessible.

关于json - 如何从类型为 "application/json"的 CFFUNCTION 创建输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66465978/

相关文章:

coldfusion - cflocation 在 CF10 中不再有效

coldfusion - 当我从 CF6.1 迁移到 CF8 或 Railo3.1 时,有哪些陷阱在等着我?

cfml - 本地开发上的 Lucee Express

java - Json 和 Array 序列化 - Java Spring Boot

coldfusion - structClear(session) 与 sessionInvalidate() 有何不同?

javascript - ColdFusion AJAX : Element is undefined in arguments

asp.net - 是否可以从 ColdFusion 引用 .NET 程序集?

ios - 全局变量在匿名方法中不存储任何数据

json - 使用 json4s 在 Scala 应用程序中生成 json

python - 写入文件时如何格式化JSON数据