Мне нужен инструмент для разбора табличных выражений Lua. Если все остальное не сработает, я в конечном итоге просто кодирую небольшой модуль Lua для преобразования таблиц в XML, но на данный момент меня интересует библиотека Ruby, которая делает это, но в случае неудачи я принимаю инструмент на любом языке, если я можно посмотреть на его источник.
Вот пример фрагмента (вывод дополнения WoW):
CT_RaidTracker_RaidLog = {
{
["PlayerInfos"] = {
["Nyim"] = {
["race"] = "Orc",
["guild"] = "Excubitores Noctae",
["sex"] = 2,
["class"] = "HUNTER",
["level"] = 70,
},
["Zyrn"] = {
["race"] = "BloodElf",
["guild"] = "Excubitores Noctae",
["sex"] = 2,
["class"] = "WARLOCK",
["level"] = 70,
},
...
Основная идея - вложенные ассоциативные массивы. Любая помощь или указатель будут рассмотрены, любая идея приветствуется.
EDIT #1
В связи со спорами позвольте мне уточнить, что я пытался. Я дополнил цепочку замены строк / регулярных выражений, предоставленную одним из участников, примерно так:
str.gsub(/--.+$/, "").gsub("=", ":").gsub(/[\[\]]/,"").gsub('" :','":').gsub(/,\s*\n(\s*)}/, "\n\\1}")
Я (1) добавил удаление комментариев Lua, (2) заменил один из заменителей регулярных выражений: когда у вас есть последний элемент в объекте / массиве, после него все еще стоит запятая, так что это должно быть закрыто и запятая правильно удалена.
Вы заметили фигурные скобки с двойным открытием ? JSON не нравится иметь анонимные объекты. Это выглядит так:
"xxx" = {
{
["aaa"} = {
["bbb"] = {
"ccc" = 7
"ddd" = "a string"
"eee" = "a date/time pattern"
}
},
["qqq"} = {
"hm" = "something"
}
},
{
["aaa"] = {
-- ...
},
["qqq"] = {
-- ...
}
}
}
В основном на корневом уровне у нас фактически есть список / массив похожих объектов, оба из которых имеют разделы "aaa" и "qqq", чтобы следовать примеру. Однако в Lua это явно разрешено, а в JSON - нет. Поскольку открывающиеся фигурные скобки обрабатываются как «начать объект», но у этого объекта нет имени.
Я попытался обнаружить этот случай с помощью регулярного выражения и заменить фигурные скобки на пары "[]". В то время как полученное регулярное выражение работало, проблема была та же: хорошо, мы вместо этого определяем массив похожих объектов, но объявление массива все еще безымянно.
Возможным решением было бы вместо обнаружения и замены этих фигурных скобок [], чтобы окрестить объекты индексами, например: "0" = { "aaa" = {...} }, "1" = { "aaa" = {... } }
и т. Д. Этот (надеюсь окончательный) обходной путь, вероятно, заставит его работать ... Будет сообщать вернуться снова. ;)