Coldfusion 10 - 循环遍历从SendGrid以JSON形式返回的结构

时间:2013-12-03 15:09:18

标签: coldfusion coldfusion-10 sendgrid

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

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

虽然我确信它会起作用,但我想知道是否没有更好的方法或方法,而不是为返回不同阵列的8个不同事件创建一个开关/案例。

enter image description here

1 个答案:

答案 0 :(得分:3)

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

<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传递的事件轻松分离逻辑。