これらの文字列は Lua コードのようです。これらの文字列の形式が固定されていると仮定すると、つまり、JSON やその他の表現を選択できない場合は、単純に Lua コードとして読み込んで実行するのがおそらく正しいでしょう。ただし、これらの文字列がどこから来たのかによっては、おそらくコードをサンドボックス化することをお勧めします。
これを行う方法は、Lua 5.1 と Lua 5.2 で異なります。どのバージョンを使用していますか?
これは Lua 5.1 での例です。ここでは、サンプル入力が実際には意図したものではなく、変数への参照ではなく文字列キーであることを前提としていname
ますcolor
。それらが変数である場合は、環境をいじる必要があります。
local strings = {
"{ name = \"string_1\", color = \"red\" }",
"{ name = \"string_1\", color = \"red\" }",
"{ name = \"string_3\", color = \"green\" }"
}
-- parses a string that represents a Lua table and returns the table
local function parseString(str)
local chunk = loadstring("return " .. str)
-- Sandbox the function. Does it need any environment at all?
-- Sample input doesn't need an environment. Let's make it {} for now.
setfenv(chunk, {})
return chunk()
end
local tables = {}
for _, str in ipairs(strings) do
table.insert(tables, parseString(str))
end