Konwerter Lua na JSON
Wklej tablicę Lua. Odbierz JSON.
Co robi to narzędzie
Jeśli kiedykolwiek miałeś tablicę Lua z configu gry, ze skryptu Redisa albo z handlera OpenResty pod nginxem i potrzebowałeś jej jako JSON, tutaj konwersja idzie jednym wklejeniem. Nie musisz instalować json.lua ani dkjson tylko po to, żeby zserializować jedną stałą.
Tablice Lua bywają upierdliwe, bo łączą część array (klucze całkowite od 1) i część hash (klucze stringowe albo mieszane) w jednej strukturze. Konwerter wykrywa, co masz: czysta tablica array zamienia się w JSON-owy array, czysta tablica hash w JSON-owy obiekt, a tablica mieszana ląduje jako obiekt JSON z kluczami liczbowymi jako stringi. To pokrywa się z tym, co opisuje manual referencyjny Lua 5.4 i co robią popularne biblioteki JSON.
Zagnieżdżone tablice schodzą tak głęboko, jak tylko chcesz. nil leci na null, true/false mapują się wprost, liczby zostają liczbami (integery zostają integerami). Stringi w pojedynczych cudzysłowach, podwójnych, albo w długich nawiasach ([[...]]) — każdą wersję parser ogarnia. Komentarze (-- i --[[ ... ]]) lecą w kosz.
Jak tego używać
Trzy kroki. Sprawdza się przy małej tablicy i przy rozjechanym configu tak samo.
Wklej swoje Lua (albo sprawdź przykład)
Wrzuć tablicę Lua do lewego edytora. Tablica array, tablica hash, zagnieżdżone tablice albo kilka top-levelowych deklaracji local x = {...} — wszystko przejdzie.
Zostaw składnię Lua w spokoju. Klucze bez cudzysłowów (name = "..."), klucze w nawiasach (["foo-bar"] = ...) i komentarze — parser to bierze bez problemu.
Kliknij Konwertuj
Wciśnij zielony przycisk Konwertuj. Narzędzie przejdzie po tablicy, na każdym poziomie sprawdzi, czy to array czy hash, i wypluje odpowiedni JSON.
Skopiuj JSON-a
Skopiuj wcięty JSON z prawego panelu do pliku configu, do wywołania API albo do test fixture. I po sprawie.
Kiedy to się realnie przydaje
Migracja configów gier/silników
Sporo silników (Love2D, Defold, addony do World of Warcrafta) trzyma config w tablicach Lua. Kiedy pipeline przechodzi na narzędzia oparte o JSON, to jest ta konwersja za jednym zamachem.
Debug handlera OpenResty / Nginx
Zbudowałeś response body jako tablicę Lua w skrypcie OpenResty — wklej tutaj, żeby zobaczyć JSON, który dostanie klient, zanim puścisz redeploy.
Skrypty Lua w Redisie
Skrypt EVAL w Redisie zwraca skomplikowaną strukturę; literal tablicy Lua łatwo wyłuskać z logów. Przepchnij do JSON-a i porównaj z tym, co widzi apka.
Przenoszenie configu do innego języka
Schodzisz z narzędzia skryptowanego w Lua na rewrite w Node albo Go. Przepuść stare tablice configu przez konwerter i masz JSON jako format migracji.
Częste pytania
Jak decyduje między arrayem a obiektem?
Ta sama reguła co w json.lua: jeśli tablica ma wyłącznie kolejne klucze całkowite od 1, to jest array. W przeciwnym razie — obiekt. Tablice mieszane (1, 2, "name") wychodzą jako obiekty z liczbowymi kluczami zamienionymi na stringi, bo JSON-owe arraye nie dopuszczają nazwanych kluczy.
A nil w tablicy?
Wartość nil w Lua usuwa dany klucz — konwerter trzyma się tej samej reguły i po prostu pomija klucze nil w wyjściu. Samotny nil (np. local x = nil) ląduje jako JSON-owy null.
Czy obsługuje stringi w długich nawiasach typu <code>[[...]]</code>?
Tak. Stringi w długich nawiasach (również [==[...]==] z dowolną liczbą znaków równości) są parsowane i wypluwane jako JSON-owe stringi z poprawnym escapowaniem.
Mogę wkleić kilka tablic naraz?
Tak. Każde top-levelowe local name = {...} czy name = {...} staje się kluczem w wyjściowym JSON-ie. Anonimowe tablice na końcu dostają klucze liczbowe. Nic nie znika po cichu.
Czy mój kod jest zapisywany?
Nie — wysyłamy go do backendu do konwersji i nie persystujemy. Mimo to, przed wklejeniem wyczyść to, co wrażliwe.
Daje radę z plikami rockspec z LuaRocks?
Tak. Pliki rockspec to w gruncie rzeczy tablice Lua, więc konwertują się czysto — wygodne, jeśli przenosisz metadane zależności do rejestru w formacie JSON.
Inne narzędzia, które mogą się przydać
Lua do JSON dobrze gra z resztą skrzynki: