冷聚变 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>

有两个步骤可以实现您的目标。

  1. 创建并return结构数组而不是查询(完全基于 CFML 端)

  2. 使用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"

处理此问题

希望对你有用!