파란하늘의 지식창고
반응형

lua로 만들어진 데이터를 익숙한 json 데이터로 변환해서 사용해보고 싶었다.

그러려다 보니 lua data를 가져와 json으로 변환하는 과정을 lua 스크립트로 작성해야 했다.

그 내용을 기록해 본다.

lua 소개

https://www.lua.org/

lua는 가벼운 명령형/절차적 언어로 확장 언어로 쓰일 수 있는 스크립팅 언어를 주목적으로 설계되었다.

포르투칼어로 "달"을 의미하는 단어라고 한다.

C/C++과 같이 쓰기 좋아서 앵그리버드, 월드 오브 워크래프트, 로블록스, 네버윈터 나이츠, 문명 V 등등 다양한 게임에서 UI나 config 설정을 관리하는 용도로 많이 쓰인다고 한다.

lua 설치하기

https://www.lua.org/download.html

window에서 사용하려고 하였는데 다운로드 페이지의 상단 메뉴의 binaries -> Lua for Windws를 선택하거나 해당 github 릴리즈에서 다운로드하여 설치하면 된다.

https://github.com/rjpcomputing/luaforwindows/releases

window 버전을 설치하면 lua와 함께 제공되는 라이브러리도 같이 포함된다.
https://github.com/rjpcomputing/luaforwindows

설치 후 path에 해당 위치를 추가해 주면 된다.

내가 설치한 시점에 window 버전 가장 마지막 릴리즈 날짜가 2018년도이다.
lua는 5.4가 가장 마지막 버전인데 window 버전은 5.1이 가장 마지막 버전이었다.

Visual Studio Code에서 lua script를 사용하려고 했는데 code runnder라는 extension을 추가하면 lua 스크립트를 실행할 수 있다.
https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner 

lua 스크립트 사용해 보기

내 경우 lua 스크립트를 공부하려는 게 목적이 아니고 기존에 lua로 작성된 데이터를 가져와 json으로 변환해 보는 게 목적이었다.

이를 목적으로 스크립트를 사용해 보았다.

하려고 하는 작업은 2단계이다.

  1. lua로 만들어진 데이터를 json 형식으로 변환
  2. 변환한 데이터를. json 파일로 쓰기

json 변환엔 LuaJson을 사용하면 되고 파일로 쓰는 건 기본 제공되는 기능이다.

가져온 데이터를 json으로 변환하는 예제는 다음과 같다.
https://docs.coronalabs.com/api/library/json/encode.html

local itemBases = require("body")
local json = require("json")
local encoded = json.encode(itemBases, { indent = true })
print(encoded)

해당 데이터를 파일로 쓰는 예제는 다음과 같다.

local file = io.open("파일위치", "w+") 
file:write(encoded) 
file:seek("set", 0) 
file:close()

위 예제는 단순히 하나를 가져와 다른 하나로 쓰는 경우인데 여러 개의 데이터를 가져와 여러 개의 파일로 쓰는 식의 코드 작성을 한 경우는 다음과 같다.

local keyTable = { "amulet", "axe", "belt", "body", "boots", "bow", "claw", "dagger", "fishing", "flask", "gloves", 
    "helmet", "jewel", "mace", "quiver", "ring", "shield", "staff", "sword", "wand" }

for k, v in pairs(keyTable) do 
    print(v)
    require("src.test.resources.data.bases." .. v)
    local json = require("json")
    local encoded = json.encode(itemBases, { indent = true })
    local file = io.open("src/main/resources/data/bases/" .. v .. ".json", "w+")
    file:write(encoded)
    file:seek("set", 0)
    file:close()
    -- print(encoded)
end

lua 문법을 잘 몰라도 대충 여러 개의 값을 for문으로 돌리면서 가져오고 파일로 저장하는 처리를 쉽게 구현할 수 있었다.

 

 
반응형
profile

파란하늘의 지식창고

@Bluesky_

내용이 유익했다면 광고 배너를 클릭 해주세요