IMPORTJSON 自定义函数 google 张
IMPORTJSON custom function google sheets
/**
* 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";
}
}
我在 google sheet 中使用此自定义函数来尝试导入某些 api 数据。我已经让它做了一些事情,但我无法让它从 https://politicsandwar.com/api/alliances/ 中提取 "id"(这是在 "a1" 单元格中)
在我 sheet 的单元格中我使用 =importjson(A1, "alliances/id") 但它只说节点不可用。
有什么建议吗?
"Node Not Available"的原因:
从 https://politicsandwar.com/api/alliances/
检索到的数据是 JSON 数据。 alliances
是一个数组。当输入的xpath ["alliances", "id"]
for(var i=0;i<patharray.length;i++){json = json[patharray[i]];}
为运行 时,我认为由于json.alliances
中的键没有id
而在第2 次循环发生错误。在您的脚本中,JSON 中的数组似乎无法分析。
示例脚本:
如果您想使用 alliances/id
从 https://politicsandwar.com/api/alliances/
检索数据,仅用于执行此操作的示例脚本如下。
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;
}
如果数据显示不是您想要的,请随时告诉我。如果我误解了你的问题,我很抱歉。
/**
* 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";
}
}
我在 google sheet 中使用此自定义函数来尝试导入某些 api 数据。我已经让它做了一些事情,但我无法让它从 https://politicsandwar.com/api/alliances/ 中提取 "id"(这是在 "a1" 单元格中)
在我 sheet 的单元格中我使用 =importjson(A1, "alliances/id") 但它只说节点不可用。
有什么建议吗?
"Node Not Available"的原因:
从 https://politicsandwar.com/api/alliances/
检索到的数据是 JSON 数据。 alliances
是一个数组。当输入的xpath ["alliances", "id"]
for(var i=0;i<patharray.length;i++){json = json[patharray[i]];}
为运行 时,我认为由于json.alliances
中的键没有id
而在第2 次循环发生错误。在您的脚本中,JSON 中的数组似乎无法分析。
示例脚本:
如果您想使用 alliances/id
从 https://politicsandwar.com/api/alliances/
检索数据,仅用于执行此操作的示例脚本如下。
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;
}
如果数据显示不是您想要的,请随时告诉我。如果我误解了你的问题,我很抱歉。