我有一个 JSON 字符串,我正在使用 serializeJSON() 进行序列化,并且使用 cfhttp 获取它,但是当我使用 DeserializeJSON() 时,我抛出错误“JSON 解析失败:JSON 字符串意外结束”。
<cfdirectory directory = "#imagePath#\#getType#\new" action="list" name="getList">
<cfset getDATA = serializeJSON(getList)>
我已经验证了 JSON 字符串:
{"COLUMNS":["NAME","SIZE","TYPE","DATELASTMODIFIED","ATTRIBUTES","MODE","DIRECTORY","LINK"],"DATA":[["test.jpg",154227,"File","November, 22 2019 12:15:43","","","D:\\wwwroot\\images\\new",false]]}
它在我尝试反序列化之前通过 IsJSON()。
<cfhttp method="get" username="#un#" password="#pw#" url="#brkrURL#" port="#brkrPORT#" result="brokerData">
<cfif IsJSON(brokerData.fileContent)>
<cftry>
<cfset getData = DeserializeJSON(brokerData.fileContent, false)>
<cfdump var="#getData#">
<cfcatch>
<cfdump var="#brokerData.fileContent#">
<cfdump var="#cfcatch#">
<cfabort>
</cfcatch>
</cftry>
</cfif>
这在 CF10 中工作,但这是一个新的 CF18 服务器。
来自 Adobe:useCustomSerializer true/false。是否使用 customSerializer。默认值是true。自定义序列化程序将始终用于反序列化。如果为 false,则 JSON 反序列化将使用默认的 ColdFusion 行为完成。
由于 SerializeJSON 的默认值是“true”,因此我将 customSerializer 更改为“true”,这允许 JSON 被反序列化,但它返回一个 Struct(它用于返回查询)所以我添加了一个函数来放置结构成一个查询。
<!--- convert a Struct to a query --->
<cffunction name="structToQuery" access="public" output="true" returntype="query" hint="Changes a structure to a query.">
<cfargument name="getStruct" type="struct" required="true" />
<cfset getData = QueryNew("")>
<cfloop from="1" to="#arrayLen(getStruct.columns)#" index="col">
<cfset QueryAddColumn(getData, getStruct.columns[col], 'VarChar', ArrayNew(1)) />
</cfloop>
<cfloop from="1" to="#arrayLen(getStruct.data)#" index="row">
<cfset temp = QueryAddRow(getData, 1)>
<cfloop from="1" to="#arrayLen(getStruct.columns)#" index="col">
<cfif arrayIsDefined(getStruct.data[row], col)>
<cfset QuerySetCell(getDataJSON, getStruct.columns[col],getStruct.data[row][col]) />
<cfelse>
<cfset QuerySetCell(getDataJSON, getStruct.columns[col],'') />
</cfif>
</cfloop>
</cfloop>
<cfreturn getData>
</cffunction>
<cfset getData = structToQuery(DeserializeJSON(brokerData.fileContent, true))>
这现在正在工作......有更好的方法吗?