【问题标题】:Coldfusion 10 - looping over structures returned in JSON from SendGridColdfusion 10 - 循环从 SendGrid 以 JSON 格式返回的结构
【发布时间】:2013-12-03 15:09:18
【问题描述】:

SendGrid 正在更改他们的 eventhook 系统以将 JSON 发布到网页。当数据被反序列化时,它是一个数组的集合,每个数组都包含基于事件可能不同的键。我需要根据事件处理并添加条目到我们的电子邮件跟踪数据库中,包含的数据是数组或数组中的数组。

我正在寻找一种方法来有效地处理这些返回的数组。我最初的想法是用“事件”作为表达式来做一个 cfswitch。如果我知道 event=bounced,我就知道数组中还有哪些其他键。

虽然我确信这会奏效,但我想知道是否没有更好的方法或方法来代替为返回不同数组的 8 个不同事件创建开关/案例。

【问题讨论】:

  • 您可以使用三元运算符来检查变量是否存在。例如email = structKeyExists(i,'email') ? i.email : ''

标签: coldfusion coldfusion-10 sendgrid


【解决方案1】:

我会将我的代码划分为一个可以确定应该/不应该做什么的对象。所以你会有这样的东西:

<cfcomponent displayname="SendGridProcessor">

    <cffunction name="processEvent" access="public" returntype="void" output="false">
        <cfargument name="EventData" type="struct" required="true" />

        <cfswitch expression="#Arguments.EventData.Event#">

            <cfcase value="processed">
                <cfset processEventProcessed( Arguments.EventData ) />
            </cfcase>

            <cfcase value="dropped">
                <cfset processEventDropped( Arguments.EventData ) />
            </cfcase>

        </cfswitch>

    </cffunction>

    <cffunction name="processEventProcessed" access="private" output="false" returntype="void">
        <cfargument name="EventData" type="struct" required="true" />
        <!--- do your processing --->
    </cffunction>

    <cffunction name="processEventDropped" access="private" output="false" returntype="void">
        <cfargument name="EventData" type="struct" required="true" />
        <!--- do your processing --->
    </cffunction>

</cfcomponent>

这允许您拥有一个可以在循环事件时调用的单一方法,以及一种基于从 SendGrid 传递的事件分离逻辑的简单方法。

【讨论】:

  • 这是一个好方法。只要您将各个操作的逻辑封装在单独的函数中,使用 switch/case 就没有本质上的错误。此外,为了获得最大可用性,您可能希望为每个函数定义单独的参数,而不是单个参数(结构)。调用函数时,使用argumentCollection 将结构键作为单独的参数传递。即processEventDropped(argumentCollection=Arguments.EventData).
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 2017-08-06
  • 1970-01-01
相关资源
最近更新 更多