Как читать. lua файл с несколькими таблицами? - PullRequest
0 голосов
/ 30 января 2020

Здравствуйте, я никогда раньше не использовал Lua и просто хотел просто взять файл .lua, разобрать его и превратить в какой-нибудь json. Я смог сделать это с файлом с одной таблицей, например так:

return { ["Thing"] = { ["SubThing"] = {} } }

Я пытаюсь выяснить, как разобрать файл .lua, для которого определены несколько таблиц (я думаю? ). Вместо однократного возврата это выглядит следующим образом:

SomeVariable = { ["Thing1"] = { ["SubThing"] = {} } }
SomeOtherVariable = { ["Thing2"] = { ["SubThing2"] = {} } }
SomeLastVariable = { ["Thing3"] = { ["SubThing3"] = {} } }

Поскольку используемая библиотека json , которую я использую, требует разбора одной таблицы, я не уверен, что делать , Любая помощь будет принята с благодарностью.

Моя конечная цель - проанализировать этот файл и сделать так, чтобы эти три переменные были просто ключами верхнего уровня га sh.

Ответы [ 2 ]

0 голосов
/ 30 января 2020

Если это отдельный файл, вы можете сделать следующее:

local json = require 'cjson'
-- Using cjson because it's the one I know, I assume your library is similar

local env = setmetatable({}, {__index=_G})
-- Create a new "env" table that will look up missing keys in the global environment

loadfile(
   "tables.lua", -- Your file
   "t", -- Only read Lua source file, no bytecode
   env -- Load the code with "env" as its environment
)() -- Run the code right after loading it

print(json.encode(env))
0 голосов
/ 30 января 2020
Old_G = {}
for k, v in pairs(_G) do
   Old_G[k] = v
end

dofile('file_name.lua')
--SomeVariable = { ["Thing1"] = { ["SubThing"] = {} } }
--SomeOtherVariable = { ["Thing2"] = { ["SubThing2"] = {} } }
--SomeLastVariable = { ["Thing3"] = { ["SubThing3"] = {} } }


local new_keys = {}
for k, v in pairs(_G) do
   if Old_G[k] ~= v then
      new_keys[k] = v
   end
end
Old_G = nil
return new_keys
...