使用javascript函数分析Coldfusion JSON-未捕获引用错误:未定义WddxRecordset

使用javascript函数分析Coldfusion JSON-未捕获引用错误:未定义WddxRecordset,javascript,json,coldfusion,Javascript,Json,Coldfusion,我试图解析Coldfusion JSON数据,使其看起来“正常” ColdFusion json: {“ROWCOUNT”:3,“列”:[“ROWID”,“REL”,“DATE”,“FOA”,“TITLE”,“APPRECEIPE”,“OPENING”,“KEYWORDS”,“DOC”,“PURPOSE”,“APP”,“NAME”,“PURPOSE”],“DATA:{“ROWID:[248422484123780],“REL:[“032”,“031”,“108”], 在web上搜索并找到此链接:

我试图解析Coldfusion JSON数据,使其看起来“正常” ColdFusion json:

{“ROWCOUNT”:3,“列”:[“ROWID”,“REL”,“DATE”,“FOA”,“TITLE”,“APPRECEIPE”,“OPENING”,“KEYWORDS”,“DOC”,“PURPOSE”,“APP”,“NAME”,“PURPOSE”],“DATA:{“ROWID:[248422484123780],“REL:[“032”,“031”,“108”],

在web上搜索并找到此链接:

他提议使用此功能:

Object.prototype.parseCFJSON = function() {
var result = [],
   data = this;
for (var j = 0; j < data.DATA.length; j++) {
  result[j] = {};
  for (var i = 0; i < data.COLUMNS.length; i++) {
     result[j][data.COLUMNS[i].toLowerCase()] = data.DATA[j][i];
  }
}
return result;
};
我得到这个错误:

未捕获类型错误:无法读取未定义的属性“length”

在这条线上

for(var j=0;j


我做错了什么,我真的被难住了。任何帮助都将不胜感激。我可能是完全错误地使用了js函数(仍在学习)。

您是否考虑过将ColdFusion JSON数据转换回ColdFusion查询对象,然后使用重新转换回JSON

JSONUtil通过“strictMapping”和“SerializeQueryColumns”支持,对CF7-2016提供了更好的JSON支持


JSONString={};/*这需要是ColdFusion JSON查询*/
JSONUtil=CreateObject(“组件”、“JSONUtil”);
QueryData=JSONUtil.DeserializeJSON(JSONString,false);
JSON_oldWDDX=JSONUtil.SerializeJSON(var=QueryData,serializeQueryByColumns=true,strictMapping=true);
JSON_Array=JSONUtil.SerializeJSON(var=QueryData,serializeQueryByColumns=false,strictMapping=true);

也许您可以尝试将coldfusion序列化为字符串,然后将其传递到函数中。然后,使用
parse()


var#toScript(jsonURL,“jsonURL”)#;
函数parseCFJSON(json){
var结果=[],
data=json.parse();
对于(var j=0;j
我发现这里出了什么问题

这个

var#toScript(jsonURL,“jsonURL”)#;
分析不正确。我将其更改为eval(),因此更新后的脚本如下所示,并能完美返回

<script>
mydata = eval(<cfoutput>#jsonURL#</cfoutput>)
<cfoutput>
</cfoutput>
Object.prototype.parseCFJSON = function() {

var result = [],
   data = this;

for (var j = 0; j < data.DATA.length; j++) {
  result[j] = {};
  for (var i = 0; i < data.COLUMNS.length; i++) {
     result[j][data.COLUMNS[i].toLowerCase()] = data.DATA[j][i];
  }
}

return result;
};
mydata = mydata.parseCFJSON();
console.log(mydata);
alert(mydata);
</script>

mydata=eval(#jsonURL#)
Object.prototype.parseCFJSON=function(){
var结果=[],
数据=这个;
对于(var j=0;j
将“struct”传递给serializeJson函数对我也很有用


SerializeJSON(var,“struct”);

我从来没有尝试过这个,现在让我尝试一下,希望这会有所帮助。谢谢您当我尝试使用它时,我遇到了一个错误:`DeserializeJSON函数的JSONVAR参数是必需的,但没有传入`对不起……我已经更新了DeserializeJSON()语法。请立即尝试。我现在收到一个不同的错误。
变量Islucerailo未定义。错误发生在D:/vv/vv/vv/JSONUtil.cfc:line 376
我转到cfset变量并从
中删除了'this',它现在正在工作抱歉,我搞错了我的注释:在你的第二个代码片段中:jsonURL仍然是定义的,对吗?哈您是否已尝试在控制台中输出数据变量,以准确查看传递给函数的内容?@Esten当我尝试传递给它时,我收到了这些错误。我要说的是,如果您放置
console.log(此)
之前的
for
条件出现错误。基本上是说它找不到
数据的值。数据
,所以我很好奇
这个
的值是什么is@Estenconsole.log(这个)在“for”未找到任何内容之前,可能是我将数据错误地传递给了函数?教程中说,像这样传递结构myData=myData.parseCFJSON();我以为我在做这个函数是在
对象的原型上创建的,这意味着该函数可以被所有其他对象访问。所以当他调用
myData=myData.parseCFJSON()时
myData
需要是一个对象。
SerializeJson
应该返回一个字符串,而不是一个对象,所以这可能就是为什么在执行
jsonURL.parseCFJSON()时出现问题的原因;
执行此操作时会出现哪一行错误:
URLd.parseCFJSON()
我尝试了,但仍然得到了未定义的
无法读取属性'length'
console.log(数据)在设置数据后是否返回对象?
<script>
<cfoutput>
var #toScript(URLd,"URLd")#;
</cfoutput>
Object.prototype.parseCFJSON = function() {

var result = [],
   data = this;

for (var j = 0; j < data.DATA.length; j++) {
  result[j] = {};
  for (var i = 0; i < data.COLUMNS.length; i++) {
     result[j][data.COLUMNS[i].toLowerCase()] = data.DATA[j][i];
  }
}

return result;
};
ujsonURL = jsonURL.parseCFJSON();
console.log(ujsonURL);
</script>
<cfscript>
JSONString = {}; /* This needs to be the ColdFusion JSON query */
JSONUtil = CreateObject("component","JSONUtil");
QueryData = JSONUtil.DeserializeJSON(JSONString, false);
JSON_oldWDDX = JSONUtil.SerializeJSON(var=QueryData, serializeQueryByColumns=true, strictMapping=true);
JSON_Array = JSONUtil.SerializeJSON(var=QueryData, serializeQueryByColumns=false, strictMapping=true);
</cfscript>
<cfset jsonURL = SerializeJSON(SmartGuideSearchRet,true)>
<script>
<cfoutput>
var #toScript(jsonURL,"jsonURL")#;
</cfoutput>
function parseCFJSON(json) {

var result = [],
   data = json.parse();

for (var j = 0; j < data.DATA.length; j++) {
  result[j] = {};
  for (var i = 0; i < data.COLUMNS.length; i++) {
     result[j][data.COLUMNS[i].toLowerCase()] = data.DATA[j][i];
  }
}

return result;
};
parsedJSON = parseCFJSON(ujsonURL);
console.log(parsedJSON);
</script>
<script>
mydata = eval(<cfoutput>#jsonURL#</cfoutput>)
<cfoutput>
</cfoutput>
Object.prototype.parseCFJSON = function() {

var result = [],
   data = this;

for (var j = 0; j < data.DATA.length; j++) {
  result[j] = {};
  for (var i = 0; i < data.COLUMNS.length; i++) {
     result[j][data.COLUMNS[i].toLowerCase()] = data.DATA[j][i];
  }
}

return result;
};
mydata = mydata.parseCFJSON();
console.log(mydata);
alert(mydata);
</script>