【问题标题】:IMPORTJSON sometimes not getting data even when I use Google Workspace即使我使用 Google Workspace,IMPORTJSON 有时也无法获取数据
【发布时间】:2022-12-08 02:33:23
【问题描述】:

我在谷歌上找到一个 ImportJson 是这样的:

function IMPORTJSON(json, xpath) {
try{
// /rates/EUR
var res = UrlFetchApp.fetch(url);
var content = res.getContentText();
var json = JSON.parse(content);

var patharray = xpath.split("/");
//Logger.log(patharray);

for(var i=0;i\<patharray.length;i++){
json = json\[patharray\[i\]\];
}

//Logger.log(typeof(json));

if(typeof(json) === "undefined"){
return "Node Not Available";
} else if(typeof(json) === "object"){
var tempArr = \[\];

     for(var obj in json){
       tempArr.push([obj,json[obj]]);
     }
     return tempArr;

} else if(typeof(json) !== "object") {
return json;
}
}
catch(err){
return "Error getting data";
}
}

我有一种方法可以将跟踪号码的状态加载为 UPS、Fedex ...

=importjson(join("","http://shipit-api.herokuapp.com/api/carriers/",X4,"/",W4),"activities/0/details")

X4 是运营商名称“usps、fedex、ups...” W4 包含跟踪号码。
有什么办法可以让我只加载状态 1 次并对每个包含跟踪号码的单元格使用结果吗?
因为现在有一段时间我的工作表出现“获取数据时出错”并且直到第二天代码将再次运行

我尝试使用 Google workspace 帐户来运行它但仍然运行了一天(当我的数据有 1000 行有跟踪编号时)它再次显示“获取数据时出错”

【问题讨论】:

标签: google-apps-script google-sheets urlfetch custom-function


【解决方案1】:

看来您必须花一些时间学习 JavaScript / Google Apps 脚本中的调试、HTTP 请求和错误处理,因为您遇到的错误是自定义错误,对理解正在发生的事情没有帮助。

首先在 catch 子句中添加 console.log(err.message, err.stack)

function IMPORTJSON(json, xpath) {
  try {
    // /rates/EUR
    var res = UrlFetchApp.fetch(url);
    var content = res.getContentText();
    var json = JSON.parse(content);

    var patharray = xpath.split("/");
    //Logger.log(patharray);

    for (var i = 0; i < patharray.length; i++) {
      json = json[patharray[i]];
    }

    //Logger.log(typeof(json));

    if (typeof(json) === "undefined") {
      return "Node Not Available";
    } else if (typeof(json) === "object") {
      var tempArr =  [];

      for (var obj in json) {
        tempArr.push([obj, json[obj]]);
      }
      return tempArr;

    } else if (typeof(json) !== "object") {
      return json;
    }
  } catch (err) {
    console.log(err.message, err.stack);
    return "Error getting data";
  }
}

然后使用类似以下函数的东西从脚本编辑器运行/调试该函数。

function debugIMPORTJSON(){
   const X4 = "put here the value of X4";
   const W4 = "put here the value of W4";
   const value = IMPORTJSON(["http://shipit-api.herokuapp.com/api/carriers/",X4,"/",W4].join(""),"activities/0/details");
   console.log(value);
}

收到错误消息后,您将能够更好地确定找到解决方案的后续步骤。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多