Javascript JSON解析未按预期工作
我有这段代码来解析JSON API中的值。我试图访问数组中的值,但得到了TypeError:无法从未定义中读取属性结果。第24行 我的代码如下:Javascript JSON解析未按预期工作,javascript,json,Javascript,Json,我有这段代码来解析JSON API中的值。我试图访问数组中的值,但得到了TypeError:无法从未定义中读取属性结果。第24行 我的代码如下: function getItemID(searchTerm) { var fetchUrl = "http://www.gw2spidy.com/api/v0.9/json/item-search/" + escape(searchTerm) + "?exclude_unsellable=1"; var jsonData = UrlFetch
function getItemID(searchTerm) {
var fetchUrl = "http://www.gw2spidy.com/api/v0.9/json/item-search/" + escape(searchTerm) + "?exclude_unsellable=1";
var jsonData = UrlFetchApp.fetch(fetchUrl);
var jsonString = jsonData.getContentText();
var jsonObject = JSON.parse(jsonString).result;
for(i = 0; i < jsonObject.results.length; i++){
if(jsonObject.results[i].name.toLowerCase() == searchTerm.toLowerCase()){
return jsonObject.results[i].data_id;
}
}
return 0;
}
根据,results是jsonObject的一个属性,而不是jsonObject.result的一个实际上未定义的属性
因此,您应该通过替换这一行来解决:
var jsonObject = JSON.parse(jsonString).result;
为此:
var jsonObject = JSON.parse(jsonString);
存在一些打字错误和冗余的属性访问。你需要从
var jsonObject = JSON.parse(jsonString).result;
for(i = 0; i < jsonObject.results.length; i++){
if(jsonObject.results[i].name.toLowerCase() == searchTerm.toLowerCase()){
return jsonObject.results[i].data_id;
}
}
为此:
var jsonObject = JSON.parse(jsonString).results;
for(i = 0; i < jsonObject.length; i++){
if(jsonObject[i].name.toLowerCase() == searchTerm.toLowerCase()){
return jsonObject[i].data_id;
}
}
基本调试:console.logjsonObject以查看您得到了什么。。。另外,您正在执行JSON.parse….result,所以*除非sit返回obj.result.results,否则您在开始循环之前就已经深入到数据库中了。请从jsonObject分配中删除.result。否则,您基本上是在执行JSON.parsejsonString.result.results有一个输入错误,但这是另一个问题,不是您发布的问题。更改为JSON.parsejsonString.result;到JSON.parsejsonString.results;遗漏扫描你发布了你的jsonData是什么样子的?@Tao,这不是遗漏扫描的问题,我很笨。我从一个例子中复制了这个片段,我认为这是JSON解析过程的一部分。请接受和/或投票,如果答案正确的话。我选择了另一个更精简代码的答案。感谢您的修复!我真不敢相信我居然错过了这个错误。
var jsonObject = JSON.parse(jsonString).results;
for(i = 0; i < jsonObject.length; i++){
if(jsonObject[i].name.toLowerCase() == searchTerm.toLowerCase()){
return jsonObject[i].data_id;
}
}