代码之家  ›  专栏  ›  技术社区  ›  Felkey

IMPORTJSON自定义函数google sheets

  •  0
  • Felkey  · 技术社区  · 7 年前
    /**
    * Imports JSON data to your spreadsheet Ex: IMPORTJSON("http://myapisite.com","city/population")
    * @param url URL of your JSON data as string
    * @param xpath simplified xpath as string
    * @customfunction
    */
    function IMPORTJSON(url,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";  
      }
    
    }
    

    我在谷歌表单中使用这个自定义函数来尝试导入某些api数据。我已经让它做了一些事情,但我有麻烦,让它脉冲的“id”从 https://politicsandwar.com/api/alliances/ (这在单元格“a1”中)

    有什么建议吗?

    1 回复  |  直到 4 年前
        1
  •  0
  •   Tanaike    7 年前

    “节点不可用”的原因:

    从检索到的数据 https://politicsandwar.com/api/alliances/ 是JSON数据。 alliances 是一个数组。什么时候 for(var i=0;i<patharray.length;i++){json = json[patharray[i]];} 由输入的xpath运行 ["alliances", "id"] ,我认为第二个循环出现错误,因为没有 id 钥匙的 json.alliances . 在您的脚本中,似乎无法分析JSON中的数组。

    示例脚本:

    如果要从中检索数据 https://politicsandwar.com/api/alliances/ alliances/id ,仅用于执行此操作的示例脚本如下。

    function IMPORTJSON(url,xpath){
      var res = UrlFetchApp.fetch(url);
      var content = res.getContentText();
      var json = JSON.parse(content);
      var patharray = xpath.split("/");
      var res = [];
      for (var i in json[patharray[0]]) {
        res.push(json[patharray[0]][i][patharray[1]]);
      }
      return res;
    }
    

    如果显示的数据不是您想要的,请随时告诉我。如果我误解了你的问题,对不起。