You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ColdFusion CFC函数序列化数组格式异常,求修复方案

问题分析

你当前代码的核心问题是:将每个语言对应的月份字符串(带引号和逗号)作为单个元素添加到数组中,导致arrData最终是仅含一个元素的数组。序列化后自然会把这个长字符串作为数组的唯一元素,出现格式错误。

解决方案

方案一:正确构建数组(推荐)

直接将月份作为数组的独立元素添加,无需额外字符串处理,序列化后直接得到符合要求的JSON格式。同时修正英文二月的拼写错误(Febuary→February):

<cffunction name="getLocaleMonths">
    <cfargument name="sLanguage" required="true" default="1">
    <cfset arrData = []>
    <cfswitch expression="#sLanguage#">
        <!-- 合并相同语言的case,简化代码 -->
        <cfcase value="10,6"> 
            <cfset arrData = ["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]>
        </cfcase>
        <cfcase value="13">
            <cfset arrData = ["siječanj", "veljača", "ožujak", "travanj", "svibanj", "lipanj", "srpanj", "kolovoz", "rujan", "listopad", "studeni", "prosinac"]>
        </cfcase>
        <cfcase value="1">
            <cfset arrData = ["January","February","March","April","May","June","July","August","September","October","November","December"]>
        </cfcase>
    </cfswitch>
    <cfreturn serializeJSON(arrData)>
</cffunction>

方案二:正则替换临时修复(不推荐)

如果必须保留原有的字符串添加方式,可通过正则替换将数组内的单个字符串元素拆分为独立的JSON元素:

<cffunction name="getLocaleMonths">
    <cfargument name="sLanguage" required="true" default="1">
    <cfset arrData = []>
    <cfswitch expression="#sLanguage#">
         <cfcase value="10">
             <cfset arrayAppend(arrData,'"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"')>
         </cfcase>
         <cfcase value="6">
            <cfset arrayAppend(arrData,'"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"')>
         </cfcase> 
         <cfcase value="13">
            <cfset arrayAppend(arrData,'"siječanj", "veljača", "ožujak", "travanj", "svibanj", "lipanj", "srpanj", "kolovoz", "rujan", "listopad", "studeni", "prosinac"')>
         </cfcase>  
         <cfcase value="1">
            <cfset arrayAppend(arrData,'"January","February","March","April","May","June","July","August","September","October","November","December"')>
         </cfcase> 
</cfswitch> 
    <!-- 正则替换拆分单个元素为多个JSON元素 -->
    <cfset results = REReplace(serializeJSON(arrData), '\["([^"]+(?:",\s?"[^"]+)*)"\]', '["$1"]', 'all')>
    <cfreturn results>
</cffunction>

正则逻辑:匹配数组内的单个字符串元素,将其中的逗号分隔月份转换为独立的JSON数组元素。

内容的提问来源于stack exchange,提问作者SweetTooth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:55:35