冷聚变 JSON
Coldfusion JSON
目前我得到这个输出(QueryBean):
但我想要 "normal" JSON 输出,就像这样:
[
{
"EventType": "active",
"InstanceId": "6728E65C-XXXX-XXXXX",
"CustomerId": "1000324234",
"Name": "bilderbuchverein Hermsen"
"Amount": 999999,
"StartDate": "August, 01 2019 00:00:00",
"ExpirationDate": null
},
{
"EventType": "active",
"InstanceId": "956FA492-XXXX-XXXXX",
"Name": "Phantasialand"
"CustomerId": "12345678999",
"Amount": 123456789,
"StartDate": "August, 14 2019 00:00:00",
"ExpirationDate": null
}
]
如何更改输出格式?我的函数有参数 produces="application/json"
<cffunction name="listEvents" access="remote" returnType="any" produces="application/JSON" httpmethod="GET" restpath="/events">
<cfquery datasource="hostmanager" name="plannedInstances">
SELECT * FROM licenses
</cfquery>
<cfreturn plannedInstances>
</cffunction>
有两个步骤可以实现您的目标。
创建并return结构数组而不是查询(完全基于 CFML 端)
使用jQuery中的ParseJson方法解析来自CF的响应
这里是 return 以 JSON 格式构建结构数组的示例。它创建一个数组,并在查询循环中用单独的结构填充它。插入查询列名作为结构键,最后将结构追加到根数组中。最后,return 来自函数的那个数组。
<cffunction name="sampleCall" access="remote" returntype="any" returnformat="JSON">
<cfquery name="read" datasource="myDataSource">
SELECT * FROM myTable limit 10
</cfquery>
<cfset myArray = [] >
<cfloop query="read">
<cfset myStr = {} >
<cfset structInsert(myStr, "logid", read.logid)>
<cfset structInsert(myStr, "log_datetime", read.log_datetime)>
<cfset structInsert(myStr, "log_Details", read.log_Details)>
<cfset arrayAppend(myArray,myStr)>
</cfloop>
<cfreturn myArray / >
</cffunction>
注意:该示例使用我的查询中的示例列。您可以使用自己的列名。
如果像下图那样转储结果
要将JSON 输出数据作为结构数组,您可以使用应用程序级定义。在 Application.cfc
中,通过添加 this.serialization.serializeQueryAs = "struct"
,您可以将 JSON 输出数据序列化为结构数组,如下所示。
[
{
"CATEGORYID":20,
"CATEGORYNAME":"php",
"CATEGORYDESC":"php"
},
{
"CATEGORYID":21,
"CATEGORYNAME":"cf",
"CATEGORYDESC":"cf"
},
{
"CATEGORYID":22,
"CATEGORYNAME":".Net",
"CATEGORYDESC":".net"
}
]
我在测试中使用了相同的代码 table。 (请查看示例代码结果截图)
此外,您可以参考 SerializeJSON 'Additional format for query serialization' 我认为您无法使用 produces="application/json"
处理此问题
希望对你有用!
目前我得到这个输出(QueryBean):
但我想要 "normal" JSON 输出,就像这样:
[
{
"EventType": "active",
"InstanceId": "6728E65C-XXXX-XXXXX",
"CustomerId": "1000324234",
"Name": "bilderbuchverein Hermsen"
"Amount": 999999,
"StartDate": "August, 01 2019 00:00:00",
"ExpirationDate": null
},
{
"EventType": "active",
"InstanceId": "956FA492-XXXX-XXXXX",
"Name": "Phantasialand"
"CustomerId": "12345678999",
"Amount": 123456789,
"StartDate": "August, 14 2019 00:00:00",
"ExpirationDate": null
}
]
如何更改输出格式?我的函数有参数 produces="application/json"
<cffunction name="listEvents" access="remote" returnType="any" produces="application/JSON" httpmethod="GET" restpath="/events">
<cfquery datasource="hostmanager" name="plannedInstances">
SELECT * FROM licenses
</cfquery>
<cfreturn plannedInstances>
</cffunction>
有两个步骤可以实现您的目标。
创建并return结构数组而不是查询(完全基于 CFML 端)
使用jQuery中的ParseJson方法解析来自CF的响应
这里是 return 以 JSON 格式构建结构数组的示例。它创建一个数组,并在查询循环中用单独的结构填充它。插入查询列名作为结构键,最后将结构追加到根数组中。最后,return 来自函数的那个数组。
<cffunction name="sampleCall" access="remote" returntype="any" returnformat="JSON">
<cfquery name="read" datasource="myDataSource">
SELECT * FROM myTable limit 10
</cfquery>
<cfset myArray = [] >
<cfloop query="read">
<cfset myStr = {} >
<cfset structInsert(myStr, "logid", read.logid)>
<cfset structInsert(myStr, "log_datetime", read.log_datetime)>
<cfset structInsert(myStr, "log_Details", read.log_Details)>
<cfset arrayAppend(myArray,myStr)>
</cfloop>
<cfreturn myArray / >
</cffunction>
注意:该示例使用我的查询中的示例列。您可以使用自己的列名。
如果像下图那样转储结果
要将JSON 输出数据作为结构数组,您可以使用应用程序级定义。在 Application.cfc
中,通过添加 this.serialization.serializeQueryAs = "struct"
,您可以将 JSON 输出数据序列化为结构数组,如下所示。
[
{
"CATEGORYID":20,
"CATEGORYNAME":"php",
"CATEGORYDESC":"php"
},
{
"CATEGORYID":21,
"CATEGORYNAME":"cf",
"CATEGORYDESC":"cf"
},
{
"CATEGORYID":22,
"CATEGORYNAME":".Net",
"CATEGORYDESC":".net"
}
]
我在测试中使用了相同的代码 table。 (请查看示例代码结果截图)
此外,您可以参考 SerializeJSON 'Additional format for query serialization' 我认为您无法使用 produces="application/json"
希望对你有用!