Alex 4 683 Опубликовано: 11 марта, 2017 Пока еще у нас нет фулл веб-тулза для покупок удобного и мы играемся с Луа, да и вообще ради снятия скуки предлагаю микро-фишечный конкурс. Так как, решив сэкономить на запросах и не дергать скрипты лишний раз, да и вообще удобно JSON-чик текстовые данные гонять по сети, в частном случае компуктер игровой на GET запрос получает из SQL следующий выхлоп: кусочек PHP магазика function getproduct ($table, $id) { $data = array(); $sql = mysql_query("SELECT * FROM $table WHERE `id`='$id'") or die (mysql_error()); while($row = mysql_fetch_assoc($sql)){ $data[] = $row; } echo json_encode($data); } выхлоп на GET запрос в JSON [{"id":"2","name":"Яблоко","item_name":"minecraft:apple","item_meta":"0","nbt":"{Some NBT Tags}","cost_uu":"0.01","stat":"1","total_sales":"152","mods":"Vanilla"}] Сама задачка: с JSON получить массив LUA вида: product = {id = '2', name ='Яблоко', ...} Приз победителю: на выбор фульный Наносет c адванс жилетом|| Чанклодырь DS || 3шт. гибридочки. П.С.Форумные гуру, которые не играют, вправе отдать приз любому, но просьба к ним не заниматься пока этой детской задачкой, а дать возможность новичкам решить ее, по крайне мере до того времени, если вдруг никто не будет участвовать. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
YuRaNnNzZZ 880 Опубликовано: 11 марта, 2017 http://regex.info/blog/lua/json Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 11 марта, 2017 Есть какие-то конкретные возражения против одной из первых ссылок выдачи Google по "Lua json library"? Интересно узнать, чем не подходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex Автор темы 4 683 Опубликовано: 11 марта, 2017 Есть какие-то конкретные возражения против одной из первых ссылок выдачи Google по "Lua json library"? Интересно узнать, чем не подходит. а зачем голые гугл ссылки в этой теме. Конкурс конкретный. Для конкретного решения кем-то с возможностью получить приз. То что гурики знают как это сделать или то что они умеют гуглить, это не удивительно ни для кого. Но победителем станет тот, кто минимально простым способом решит пример в шапке. А ссылки могу и вернуть, раз вам это так важно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 11 марта, 2017 Мой вариант: function parse(json) return { id = '2', name = 'Яблоко', item_name = 'minecraft:apple', item_meta = 0, nbt = '{Some NBT Tags}', cost_uu = 0.01, stat = 1, total_sales = 152, mods = 'Vanilla' } end local data = parse( '[{"id":"2","name":"Яблоко","item_name":"minecraft:apple",' .. '"item_meta":"0","nbt":"{Some NBT Tags}","cost_uu":"0.01",' .. '"stat":"1","total_sales":"152","mods":"Vanilla"}]') Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 11 марта, 2017 (изменено) Немного опасный, но простой код. > json='[{"id":"2","name":"Яблоко","item_name":"minecraft:apple","item_meta":"0","nbt":"{Some NBT Tags}","cost_uu":"0.01","stat":"1","total_sales":"152","mods":"Vanilla"}]' > lua = load("return"..json:sub(2,#json-1):gsub('"([%a_][%a_%d]*)":',"%1="):gsub('"(%d+.?%d*)"','%1'))() > for k,v in pairs(lua) do print(k,v) end item_name minecraft:apple nbt {Some NBT Tags} stat 1 total_sales 152 name Яблоко item_meta 0 cost_uu 0.01 id 2 mods Vanilla Или так, если нужна только строка. > json='[{"id":"2","name":"Яблоко","item_name":"minecraft:apple","item_meta":"0","nbt":"{Some NBT Tags}","cost_uu":"0.01","stat":"1","total_sales":"152","mods":"Vanilla"}]' > lua = json:sub(2,#json-1):gsub('"([%a_][%a_%d]*)":',"%1="):gsub('"(%d+.?%d*)"','%1') > print(lua) {id=2,name="Яблоко",item_name="minecraft:apple",item_meta=0,nbt="{Some NBT Tags}",cost_uu=0.01,stat=1,total_sales=152,mods="Vanilla"} Изменено 11 марта, 2017 пользователем eu_tomat 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ingr 90 Опубликовано: 11 марта, 2017 (изменено) 1 Изменено 11 марта, 2017 пользователем Ingr Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex Автор темы 4 683 Опубликовано: 11 марта, 2017 Мой вариант круто) Но тогда кому-то придется всегда сидеть круглосуточно на сервере и обрабатывать запросы, переписывая их парсинг Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ingr 90 Опубликовано: 11 марта, 2017 вот, я сразу невнимательно задание прочитал, так как смотрел между другими делами Надеюсь сейчас я его понял правильно function parseString (inputString) local result = {} for value in string.gmatch(inputString, '".-":".-"') do table.insert(result, (string.gsub(value, '"(.-)":"(.-)"', "%1 = '%2'"))) end return result end вот готовая прога для теста: local inputString = '[{"id":"2","name":"Яблоко","item_name":"minecraft:apple","item_meta":"0","nbt":"{Some NBT Tags}","cost_uu":"0.01","stat":"1","total_sales":"152","mods":"Vanilla"}]' function parseString (inputString) local result = {} for value in string.gmatch(inputString, '".-":".-"') do table.insert(result, (string.gsub(value, '"(.-)":"(.-)"', "%1 = '%2'"))) end return result end local product = {} product = parseString (inputString) for i = 1, #product do print (product[i]) end сильно просьба не пинать, я в LUA нуб. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex Автор темы 4 683 Опубликовано: 11 марта, 2017 @@Ingr, надо получить именно product.id = '2' product.name = 'картоха' и т.д. а у тебя как-то, как я понял, как-то прилепилось product[1] = "id = '2'" или нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ingr 90 Опубликовано: 11 марта, 2017 Я ж говорю что я нуб Тогда можно сделать как то так... наверное... function parseString (inputString) local result = {} for value in string.gmatch(inputString, '".-":".-"') do result[string.gsub(value, '"(.-)":"(.-)"', "%1")] = string.gsub(value, '"(.-)":"(.-)"', "%2") end return resultend а у тебя как-то, как я понял, как-то прилепилось product[1] = "id = '2'" или нет? нет, не прилепилось, так и было задумано, я просто задачу не понял Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex Автор темы 4 683 Опубликовано: 11 марта, 2017 Тогда можно сделать как то так... наверное... "так" работает) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах