Javascript JSON解析未按预期工作

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

我有这段代码来解析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 = 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;
     }
  }