Эти строки выглядят как код 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
Я полагаю, что строки на самом деле что-то вроде ' "{[имя] = \" STRING_1 \ " [цвет] = \" красный \ "}" '? –
Кроме того, вы имели в виду, что ключи были ссылками на переменные 'name' и' color', а не на строки 'name' и' color'? –