JSON содержит специальные символы - PullRequest
0 голосов
/ 22 марта 2012

Мой JSON содержит специальные символы, такие как: новая строка, двойные кавычки и т. Д.

Я создаю JSON, используя скрипт на стороне сервера Coldfusion.Но в случае специальных символов я получаю ошибку из-за неправильно отформатированного 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 Ответ

11 голосов
/ 22 марта 2012

Вместо того, чтобы писать JSON вручную, вы должны сгенерировать массив структур и затем использовать serializeJSON() для преобразования его в действительную строку 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>

Это не проверено, но я думаю, что оно должно работать нормально - могут быть некоторые синтаксические ошибки.

...