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
相关产品推荐
相关产品推荐

