OpenSheet - Google 表格转 JSON 接口文档
OpenSheet 是一款极简、优雅的 Google Sheets 转 JSON API 服务。无需繁琐的 Google Cloud Platform 认证,无需申请 API Key,只需将谷歌表格设为公开只读,即可瞬间将其作为强大的无后端 CMS 或数据库使用!
接口 URL 格式规范
OpenSheet 提供标准的 RESTful API 路由结构:
GET https://gh-proxy.org/opensheet/{spreadsheet_id}/{sheet_name_or_index}
{spreadsheet_id}:Google 电子表格的唯一 ID(可直接从浏览器地址栏中提取)。{sheet_name_or_index}:工作表(Tab)名称(如list、Sheet1)或从 1 开始的工作表序号(如1、2)。
三步极速上手指南
第一步:设置表格标题行 (Header Row)
在 Google Sheets 表格中,第一行将自动被解析为输出 JSON 数组中各对象的属性名 (Keys):
- 请确保第一行每个单元格均有清晰的列名(例如
name,amount,date,message)。 - 避免第一行出现空单元格或重复列名。
第二步:开启表格共享公开权限
- 打开目标 Google Sheets 表格,点击右上角绿色的 「共享」 (Share) 按钮。
- 在「常规访问权限」中,将权限从“受限制”改为 「知道链接的任何人」 (Anyone with the link)。
- 角色保持为 「查看者」 (Viewer) 即可。
第三步:提取 Spreadsheet ID 并请求接口
从浏览器地址栏中获取表格 ID:
https://docs.google.com/spreadsheets/d/1NuaXdRper70yHQXNYZaXR0Jv-1xELZ_RaPuEjWDaZns/edit
└─────────────────┬──────────────────┘
Spreadsheet ID
官方直观示例
1. 原始 Google 表格展示链接
公开示例表格:
https://docs.google.com/spreadsheets/d/1NuaXdRper70yHQXNYZaXR0Jv-1xELZ_RaPuEjWDaZns/edit
2. 对应的 JSON API 接口调用
- 按工作表名称调用:
curl https://gh-proxy.org/opensheet/1NuaXdRper70yHQXNYZaXR0Jv-1xELZ_RaPuEjWDaZns/list - 按工作表序号调用(第一张表):
curl https://gh-proxy.org/opensheet/1NuaXdRper70yHQXNYZaXR0Jv-1xELZ_RaPuEjWDaZns/1
3. 返回的 JSON 数据结构
[
{
"name": "张三",
"amount": "¥50.00",
"date": "2026-09-01",
"message": "感谢开源支持!"
},
{
"name": "李四",
"amount": "¥100.00",
"date": "2026-09-02",
"message": "加油!"
}
]
4. 实际落地案例
本站的捐赠者荣誉榜页面就是基于 OpenSheet 实现实时展示的:
高级查询参数
?raw=true 获取底层原始数值
- 默认行为:OpenSheet 会返回 Google Sheets 自动排版格式化后的可视化文本字符串。例如单元格中的货币
$1,234.56会原样输出为字符串"$1,234.56"。 - 追加
?raw=true:将返回单元格底层的原生数据类型(如数字1234.56、布尔值true/false),非常适合需要进行前端数学统计、图表绘制的数据分析场景。
https://gh-proxy.org/opensheet/1NuaXdRper70yHQXNYZaXR0Jv-1xELZ_RaPuEjWDaZns/list?raw=true
10 分钟全球边缘缓存机制
所有的 OpenSheet API 请求均接入全球 Anycast CDN 边缘缓存节点:
- 毫秒级极速响应:热点请求由离访客最近的边缘节点直接响应,延迟通常低于 30ms。
- 抗高并发流量峰值:即使前端页面遭受高频并发访问,所有流量均在边缘层消化,完全避免触碰 Google API 的每分钟频次限制。
- 自动刷新策略:边缘节点采用 10 分钟自动刷新 机制。在 Google Sheets 中修改数据后,预计在 10 分钟内全球边缘缓存将完全同步最新数据。
代码集成范例
JavaScript / TypeScript (Fetch API)
async function loadSheetData() {
const SPREADSHEET_ID = '1NuaXdRper70yHQXNYZaXR0Jv-1xELZ_RaPuEjWDaZns';
const SHEET_NAME = 'list';
const response = await fetch(`https://gh-proxy.org/opensheet/${SPREADSHEET_ID}/${SHEET_NAME}`);
const data = await response.json();
console.log('读取到表格数据:', data);
return data;
}
Python (requests)
import requests
url = "https://gh-proxy.org/opensheet/1NuaXdRper70yHQXNYZaXR0Jv-1xELZ_RaPuEjWDaZns/list"
response = requests.get(url)
items = response.json()
for row in items:
print(row.get('name'), row.get('amount'))