Lua — Как извлечь строку данных из таблицы JSON (API Google Листов)?

#google-sheets #lua

Вопрос:

Я начал изучать API Google таблиц с помощью Lua, и, хотя я могу извлекать диапазон значений, я могу только придумать, как возвращать значения в столбцах, но я также хотел бы вернуть строку.

Вот пример кода Lua, который я использовал для извлечения значений из ячеек с A1 по D5 в таблице Google. (4 столбца 4 строки)

Чтобы помочь мне отследить, что откуда исходит, я добавил название каждой ячейки в саму ячейку.

 local socket = require 'socket'
local ssl = require 'ssl'
local https = require 'ssl.https'

local body, code, headers, status = https.request("https://sheets.googleapis.com/v4/spreadsheets/[mysheetID]/values/A1:D5?key=[MyAPIkey]")
print(body)
print("---------------------")

--[[ Which returns the following…
{
   "range":"Sheet1!A1:D5",
   "majorDimension":"ROWS",
   "values":[
      [
         "Cell A1",
         "Cell B1",
         "Cell C1",
         "Cell D1"
      ],
      [
         "Cell A2",
         "Cell B2",
         "Cell C2",
         "Cell D2"
      ],
      [
         "Cell A3",
         "Cell B3",
         "Cell C3",
         "Cell D3"
      ],
      [
         "Cell A4",
         "Cell B4",
         "Cell C4",
         "Cell D4"
      ]
   ]
}
]]--

 

Чтобы отобразить столбец, я делаю следующее..

 
local json = require "dkjson"
local j = json.decode(body)
    for k,v in pairs(j.values[1]) do
    print(k,v)
end
 

Который возвращает 1-й столбец (ниже), а j.значения[2] дадут мне второй и так далее..

 1     Cell A1     
2     Cell B1     
3     Cell C1     
4     Cell D1  
 

Чего я не могу понять, так это как я могу вернуть строку, т. Е. A1, B1, C1, D1

Пожалуйста, не мог бы кто-нибудь объяснить, как я могу извлечь любую строку из списка и иметь возможность делать это последовательно, независимо от диапазона ячеек, который я решу извлечь ?

Ответ №1:

В то время как я вы не уверены, что именно вы ищете (вы упоминаете, что вы получаете A1 , B1 , C1 , D1 , что соответствует подряд), если вы хотите получить транспонировать результаты, отсортированы по столбцам вместо строк, вы можете добавить параметр запроса majorDimension=COLUMNS (если этот параметр не задан, используется значение по умолчанию ROWS , как вы можете видеть в ValueRange).

Поэтому вам придется изменить запрошенный URL-адрес с:

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

Для:

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

Ссылка:

Комментарии:

1. Большое спасибо @lamblichus, я действительно перепутал, я имел в виду строки вместо столбцов (doh!). — большое спасибо за URL-адрес листов, который помог