Java.Lang.StringBuffer ColdFusion 10 JSON编码Bug

时间:2014-04-15 14:19:06

标签: java json coldfusion coldfusion-10 stringbuffer

我在这里有点麻烦。我正在使用Web上的库中存在的相同jsonEncode函数(例如http://cflib.org/udf/jsonencode)。这些编码方法使用java.lang.StringBuffer创建json数据,而不使用CF因臭名昭着的太多内存。但是,如果我想将json值中的所有键小写,这些值恰好也是要转换为json的结构元素,则整个过程会中断。它涉及以下内容:

<cfelseif IsStruct(_data)>
  <cfset dJSONString = createObject('java','java.lang.StringBuffer').init("") />
  <cfset arKeys = StructKeyArray(_data) />
  <cfloop from="1" to="#ArrayLen(arKeys)#" index="i">
    <!--- Null Checks --->
    <cfif NOT structKeyExists(_data, arKeys[i])>
        <cfset tempVal = "null">
    <cfelse>
        <!--- Get Encoded Value --->
        <cfset tempVal = jsonEncode( 
          _data[ arKeys[i] ], 
          arguments.queryFormat, 
          arguments.queryKeyCase, 
          arguments.stringNumbers, 
          arguments.formatDates, 
          arguments.columnListFormat, 
          arguments.keyCase 
        ) />
    </cfif>
    <!--- Key to lower Case? --->
    <cfset arKey = arKeys[i] />
    <cfif Len(arKey) and arguments.keyCase neq "none">
        <cfif arguments.keyCase EQ "lower">
        <cfset arKey = LCASE(arKey) />
        <cfelse>
        <cfset arKey = UCASE(arKey) />
        </cfif>
    </cfif>
    <cfif dJSONString.toString() EQ "">
      <cfset dJSONString.append('"' & arKey & '":' & tempVal) />
    <cfelse>
        <cfset dJSONString.append("," & '"' & arKey & '":' & tempVal) />
    </cfif>
  </cfloop>

  <cfreturn "{" & dJSONString.toString() & "}" />

如果我只是简单地为arKey [i]赋值arKey而没有任何操作,那么脚本运行正常。但是,当我将键大写或小写并将其重新调回arKey变量时,该过程就会爆炸。

为什么?在CF中的lcase或ucase函数中是否存在java.lang.StringBuffer发现不兼容的东西?如果我需要继续使用StringBuffer方法,还有哪种方法可以创建这些json数据字符串而不会严重影响内存?

0 个答案:

没有答案