【发布时间】:2018-04-08 02:42:13
【问题描述】:
我的代码版本在 ColdFusion 10 中运行良好,但在 ColdFusion 9 中出现此错误:
SyntaxError: JSON.parse: expected ',' or '}' after property value in object at line 1 column 13714 of the JSON data
这是我的数据转换为 JSON 的 cffunction:
<cffunction name="getBuildings" access="remote" output="true" returnformat="JSON">
<cfset fnResults = structNew()>
<cfquery name="getBldg" datasource="myData">
SELECT
LTRIM(RTRIM(number)) AS bldgNum,
LTRIM(RTRIM(name)) AS bldgName
FROM Bldg WITH (NOLOCK)
ORDER BY name
</cfquery>
<cfset fnResults.recordcount = getBldg.recordcount>
<cfif getBldg.recordcount EQ 0>
<cfset fnResults.message = "No Buildings found.">
<cfelse>
<cfloop query="getBldg">
<cfset fnRecBldg[currentRow] = StructNew()>
<cfset fnRecBldg[currentRow].bldgName = URLEncodedFormat(getBldg.name)>
<cfset fnRecBldg[currentRow].bldgNumber = getBldg.number>
</cfloop>
<cfset fnResults.data = fnRecBldg>
</cfif>
<cfset fnResults.status = "200">
<cfreturn fnResults>
</cffunction>
这是我的 JQUERY:
function getBldg(){
var dist = $('.chBldg');
$.ajax({
type: 'POST',
url: 'Application.cfc?method=getBuildings',
data: {},
dataType: 'json'
}).done(function(obj){
var numRecs = obj.RECORDCOUNT;
if(obj.STATUS == 200){
if(numRecs == 0){
dist.find("option:gt(0)").remove();
}else{
dist.find("option:gt(0)").remove();
for(var i=0; i < numRecs; i++){
var jsRec = obj.DATA[i];
dist.append($("<option />").val(jsRec.BLDGNUMBER).text(decodeURIComponent(jsRec.BLDGNAME) +' ('+ jsRec.BLDGNUMBER +')'));
}
}
}else{
}
}).fail(function(jqXHR, textStatus, errorThrown){
alert(errorThrown);
});
}
}
这里是重复数据的小例子:
{"RECORDCOUNT":4,"STATUS":200,"DATA":[
{"BLDGNAME":"Fall%2DCasey","BLDGNUMBER":"0012"},
{"BLDGNAME":"Autmun","BLDGNUMBER":"0022"},
{"BLDGNAME":"Cedar","BLDGNUMBER":0201},
{"BLDGNAME":"Great%20Lake","BLDGNUMBER":1215}]}
此错误必须与 ColdFusion 版本 9/10 以及我的 JSON 数据的组织方式有关。我仍然没有找到错误。如果有人看到我的代码 id 中断的地方,请告诉我。
【问题讨论】:
-
我处理较小的数据样本,然后继续添加越来越多的数据,直到找到触发错误的原因。但如果我不得不猜测,我敢打赌这是一个未转义的角色。最后但并非最不重要的一点是,我会将 CF 2016 加载到开发盒中并在那里运行代码。
-
查看错误中提到的字符位置13714周围的数据。这可能会给你一个线索。
-
@Miguel-F 我在位置 13714 上找到了字符。这是值:BLDGNUMBER:0000 我不知道为什么会出错。
-
JSON 不允许数字以 0 开头。如果你想要在 JSON 中以 0 开头的数字,则必须将其括在引号中,这样它将被视为字符串,而 JSON 解析器将不会t 抛出错误。在您的情况下,有一个数字 0201 没有用引号括起来。因此,它拖着一个错误。有关详细信息,请参阅stackoverflow.com/questions/27361565/…。并检查您的 JSON 返回是否有效jsonlint.com
-
@Keshavjha 您能否提供任何有关如何将数值包含在引号中的示例。我尝试过类似“#number#”的方法,但仍然报错。
标签: jquery json coldfusion coldfusion-9