我在使用带有 Google 表格的 ImportJSON 导入数据时遇到问题

时间:2021-07-22 15:08:38

标签: google-sheets google-sheets-api

我正在尝试建立一个包含所有带有工作服和系列的球员物品的数据库。我可以拉最高级别(项目),但低于任何级别我都会收到“获取数据时出错”。

https://docs.google.com/spreadsheets/d/1BbIrzYJEqEw_eOqgKXBueDhTUKGLIlMaQVbwEIT5f9Q/edit?usp=sharing

我尝试使用 bradjasper's ImportJSON 脚本,但一直收到:

异常:提供的属性没有值:url

ImportJSONAdvanced @ importJSON.gs:217

var jsondata = UrlFetchApp.fetch(url, fetchOptions);

ImportJSON @ importJSON.gs:68

return ImportJSONAdvanced(url, null, query, parseOptions, includeXPath_, defaultTransform_);

我目前使用的在下面,我能够提取“项目”,但“项目/名称”或其他任何内容都无法检索数据。我对此很陌生,并且一直在网上寻找解决方案,但没有成功。你们过去一直非常有帮助,任何见解将不胜感激。

* 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";  
  }
  
} ```

1 个答案:

答案 0 :(得分:2)

试试这个:

var resTable = []; 
function getDataJSON(url,xpath){
  var data = JSON.parse(UrlFetchApp.fetch(url).getContentText())
  var json = eval('data.items')
  if (typeof xpath == 'object'){var liste = xpath.join().split(",")} else {var liste = xpath.split("|")}
  if (json.length){json.forEach(function(elem){getData(elem,liste)})} else {getData(json,liste)}
  return resTable
}
function getData(elem,liste){
  var prov=[]
  liste.forEach(function(chemin){
    var t=chemin.split('/');
    var obj=elem;
    for (var i=1;i<t.length;i++){obj=obj.item(t[i])}
    if(typeof obj=='object'){prov.push('['+obj+']')}else{prov.push(obj)}
  })
  resTable.push(prov)
}
Object.prototype.item=function(i){return this[i]};

https://docs.google.com/spreadsheets/d/1oy00ZZJCDYlzyCfdeIchvOUaCttbzuUeCKkacDuHeuk/copy