为什么ColdFusion的cflog会给JSON原有双引号额外加引号?如何解决?
问题原因
该问题是ColdFusion的<cflog>标签默认遵循CSV日志格式规范导致的。标准CSV格式规定:如果字段值内部包含双引号,必须将单双引号转义为连续两个双引号,避免和CSV字段的边界双引号产生歧义。你看到的额外双引号就是CSV默认的转义行为,和JSON序列化本身无关。
解决方案
方案1:使用writeLog()函数替代<cflog>标签(推荐)
ColdFusion提供的writeLog()函数不会强制对文本内容做CSV双引号转义,直接输出原生JSON内容:
<cfset local.fname = "Max"> <cfset local.lname = "Smith"> <cfset local.id = "QA-123"> <cfset writeLog(text = serializeJSON(local), level = "INFO")>
方案2:替换JSON双引号为单引号
如果必须使用<cflog>标签,可以先将序列化后的JSON字符串中的双引号批量替换为单引号,避免触发CSV转义规则,大多数JSON解析器都支持单引号格式的JSON解析:
<cflog text="#replace(serializeJSON(local), '"', "'", "all")#">
方案3:关闭日志CSV格式化(仅Adobe ColdFusion支持)
如果你使用的是Adobe ColdFusion服务器,可以直接在管理员后台的「日志设置」页关闭**「使用CSV格式写入日志」**选项,关闭后<cflog>就不会自动对双引号做转义,直接输出原生文本内容。
补充方案(无需修改代码)
如果不需要调整现有写入逻辑,后续处理日志时,只需要将日志内容中连续的两个双引号替换为单个双引号,即可得到合法的JSON字符串。
内容的提问来源于stack exchange,提问作者Cmaso
相关产品推荐
相关产品推荐

