You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua如何从Google Sheets API返回的JSON表中提取单行数据?

问题核心解答

你之前的认知存在一个小偏差:你现在用来输出「第一列」的代码,实际输出的就是你想要的**第一行(A1到D1)**数据,只是你搞反了API返回结构的行、列对应关系。

Google Sheets API默认的majorDimension参数值为ROWS,返回的values是固定的二维数组结构:

  • 外层数组的每个子元素对应你查询范围内的一行
  • 子数组内的每个元素对应当前行的一列单元格值

你要获取任意行的话,直接按索引取外层数组的对应元素即可,Lua数组从1开始计数,所以j.values[1]就是第一行、j.values[2]是第二行,以此类推。


稳定获取任意行的代码示例

加了边界判断,避免查询范围不足时索引报错,无论你指定什么单元格范围都能正常运行:

local json = require "dkjson"
local j = json.decode(body)

-- 自定义要获取的行号
local target_row = 1
-- 行号合法性校验
if target_row >= 1 and target_row <= #j.values then
    local current_row = j.values[target_row]
    -- 遍历输出当前行所有单元格
    for col_idx, cell_val in pairs(current_row) do
        print(col_idx, cell_val)
    end
else
    print("指定行号超出当前查询的单元格范围")
end

结构稳定性保证

如果担心请求参数变动导致结构变化,可以直接在API请求URL里主动指定majorDimension=ROWS参数,就能永远保证返回结构按行分组:

https://sheets.googleapis.com/v4/spreadsheets/[mysheetID]/values/A1:D5?key=[MyAPIkey]&majorDimension=ROWS

如果你需要按列取数据,才需要反向遍历每个行的对应索引:

-- 示例:取第2列所有值
local target_col = 2
for _, row in ipairs(j.values) do
    if row[target_col] then
        print(row[target_col])
    end
end

内容的提问来源于stack exchange,提问作者nodecentral

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:27:00