JSON包含特殊字符

时间:2012-03-22 16:01:10

标签: coldfusion fullcalendar coldfusion-9

我的JSON包含特殊字符,如:新行,双引号等。

我正在使用Coldfusion服务器端脚本创建JSON。但是在特殊字符的情况下,由于格式错误的JSON,我会收到错误。在这种情况下我该怎么办?

<cfoutput>
[
    <cfset loopIndex=0>
    <cfloop query="qEvents">

        <cfif loopIndex NEQ 0>,</cfif>

        <cfif is_allday EQ 1>
            <cfset isallDayEvent = "true">
        <cfelse>
            <cfset isallDayEvent = "false">
        </cfif>

        {
            "title": "#title#",
            "start": "#DateFormat(start_date_time,'mm/dd/yyyy')# #TimeFormat(start_date_time,'hh:mm tt')#",
            "end": "#DateFormat(end_date_time,'mm/dd/yyyy')# #TimeFormat(end_date_time,'hh:mm tt')#",
            "allDay": #isallDayEvent#,
            "eventID": "#event_id#",
            "duration": "#duration#",
            "note": "#note#",
            "location": "#location#"
        }
        <cfset loopIndex=loopIndex+1>
    </cfloop>
]
</cfoutput>

1 个答案:

答案 0 :(得分:11)

您应该生成一个结构数组,然后使用serializeJSON()将其转换为有效的JSON字符串,而不是手工编写JSON:

<cfset thisArrayBecomesJSON = [] />

<cfloop query="qEvents">

    <cfif is_allday EQ 1>
        <cfset isAllDayEvent = "true" />
    <cfelse>
        <cfset isAllDayEvent = "false" />
    </cfif>

    <cfset thisEvent = {
        'title' = title,
        'start' = dateFormat( start_date_time, 'mm/dd/yyyy' ) & timeFormat( start_date_time, 'hh:mm tt' ),
        'end' = dateFormat( end_date_time, 'mm/dd/yyyy' ) & timeFormat( end_date_time, 'hh:mm tt' ),
        'allDay' = isAllDayEvent,
        'eventID' = event_id,
        'duration' = duration,
        'note' = note,
        'location' = location
    } />

    <cfset arrayAppend( thisArrayBecomesJSON, thisEvent ) />

</cfloop>

<cfset myJSON = serializeJSON( thisArrayBecomesJSON ) />

<cfoutput>#myJSON#</cfoutput>

这是未经测试的,但我认为它应该可行 - 可能存在一些语法错误。