开发者问题收集

使用 javascript 函数解析 Coldfusion JSON - 未捕获的 ReferenceError:未定义 WddxRecordset

2016-09-23
940

我正在尝试解析ColdFusion JSON数据以使其看起来“正常” ColdFusion JSON:

{“ rowcount”:3,“列”:[“ rowid”,“ rel”,“ date”,“ date”,“ foa”,“ title”,“ title”,“ tempeeipe”,“”打开“,“关键字”,“ doc”,“目的”,“ app”,“ name”,“ plos”],“ data”:{“ rowid”:[24842,24841,23780],“ “ 032”,“ 031”,“ 108”], ...

在网络上搜索并找到了此链接:

http://www.tysoncadenhead.com/blog/parsing-colg/parsing-coldfusion -json-on-the-the-the-conside#.v-upkfkrkuk

他提出使用此功能:

529398146

这里是我的代码

843635506

我的控制台正在给我这个错误 接收参考文献:wddxrecordset未定义

此功能的JSON ColdFusion数据:

516781940

我遇到了此错误:

und offfick typeerror:无法读取属性'长度'长度'未定义的

在此行上

for(var j = 0; j&lt; data.data.length; j ++){ < < /p>

我做错了什么,我真的很难过。任何帮助,将不胜感激。我可能会使用JS函数完全错误(仍在学习)。

3个回答

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

JSONUtil 通过“strictMapping”和“serializeQueryByColumns”支持为 CF7-2016 提供更好的 JSON 支持。

<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>
James Moberg
2016-09-23

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

<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>
Esten
2016-09-23

好吧,我弄清楚了这里出了什么问题。

这个 <cfoutput> var #toScript(jsonURL,"jsonURL")#; </cfoutput> 解析不正确。我将其更改为 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>
Ren44
2016-09-27