Wklej Lua po lewej i kliknij "Konwertuj" — my zrobimy z tego JSON-aWklej kod Lua

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.

1

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.

2

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.

3

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: