我有一个应用程序,可以打开我已发布到网络上的电子表格的 json 版本。我使用了此网站上的说明:https://www.freecodecamp.org/news/cjn-google-sheets-as-json-endpoint/
几个月来一直工作正常,但今天我意识到我的 json 文件的 url 从昨天开始就不再工作了。它显示消息:“抱歉,目前无法打开文件。请检查地址并重试。”不过,以网页形式查看电子表格的常规链接仍然有效。
Google 是否放弃了对此功能的支持?还有其他方法可以通过 URL 获取 json 格式的电子表格数据吗?我开始研究 Google Developer API,但它真的很令人困惑。
您正在使用 Google 数据协议的 JSON Alt 类型变体。该协议已过时并且似乎不再可靠地工作。 GData API 目录 告诉:
Google Spreadsheets Data API:GData 版本仍然有效。已被 Google Sheets API v4 取代。
Google Sheets API v4 是一个现代的 RESTful 接口,通常与 客户端库 一起使用来处理数据请求的身份验证和批处理。如果您不想进行完整的客户端实现,David Kutcher 使用 jQuery 为 GData JSON Alt 类型提供以下 v4 模拟:
GData(旧版本,不推荐):
var url = 'https://spreadsheets.google.com/feeds/list/' +
spreadsheet_id + '/' + tab_ordinal + '/public/values?alt=json';
($.getJSON(url, 'callback=?')).success(function(data) {
// ...
};
V4(新版本,推荐):
var url = 'https://sheets.googleapis.com/v4/spreadsheets/' +
spreadsheet_id + '/values/' + tab_name +
'?alt=json&key=' + api_key;
($.getJSON(url, 'callback=?')).success(function(data) {
// ...
};
...哪里:
spreadsheet_id
是电子表格地址中由字母和数字组成的长字符串 - 它是 /d/
和 /edit
tab_ordinal
是工作表的编号 — 选项卡栏中出现的第一个工作表是工作表编号 1
,第二个是 2
,依此类推tab_name
是工作表的名称,即当您打开电子表格进行编辑时,您在窗口底部的选项卡栏中看到的名称api_key
是您从 Google Cloud Platform 控制台请注意,两个版本之间的 JSON 输出格式有所不同。
使用 GData 模式,需要将电子表格共享为 文件 > 共享 > 发布到网络。
使用 V4 模式,电子表格需要共享为 文件 > 共享 > 与他人共享 > 知道链接的任何人都可以查看。
截至 2022 年 3 月:
如果您不想创建密钥,可以使用以下 URL 格式:
https://docs.google.com/spreadsheets/d/{spreadsheetId}/gviz/tq
下载json.txt
格式的文件
google.visualization.Query.setResponse({json});
从中你必须切出 json
-或--
只需按照官方文档配置一个密钥即可。
https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{sheetName}?alt=json&key={theKey}
编辑:该表应该是公开的,任何有链接的人都可以查看
var url = 'https://docs.google.com/spreadsheets/d/'+id+'/gviz/tq?tqx=out:json&tq&gid='+gid;
带有电子表格的 id 和工作表的 gid
https://codepen.io/mikesteelson/pen/wvevppe 例子:
var id = '______your_speadsheet_id________';
var gid = '0';
var url = 'https://docs.google.com/spreadsheets/d/'+id+'/gviz/tq?tqx=out:json&tq&gid='+gid;
fetch(url)
.then(response => response.text())
.then(data => document.getElementById("json").innerHTML=myItems(data.substring(47).slice(0, -2))
);
function myItems(jsonString){
var json = JSON.parse(jsonString);
var table = '<table><tr>'
json.table.cols.forEach(colonne => table += '<th>' + colonne.label + '</th>')
table += '</tr>'
json.table.rows.forEach(ligne => {
table += '<tr>'
ligne.c.forEach(cellule => {
try{var valeur = cellule.f ? cellule.f : cellule.v}
catch(e){var valeur = ''}
table += '<td>' + valeur + '</td>'
}
)
table += '</tr>'
}
)
table += '</table>'
return table
}
https://sheet2api.com可以做到这一点。
JS 示例:
import Sheet2API from 'sheet2api-js';
const url = 'https://sheet2api.com/v1/FgI6zV8qT121/characters/';
const options = {};
Sheet2API.read(url, options).then(function(result){
console.log(result);
}, function(error){
console.log(error);
});