brunch

You can make anything
by writing

C.S.Lewis

by 원강민 Oct 07. 2015

웹에 있는 텍스트 데이터 로드하기

json, xml, txt 등의 파일을 가져오고 싶나요?

앱을 만들다보면 인터넷에 있는 파일들을 가져와야 하는 경우가 생깁니다. 코로나를 이용하면 간단한 코드만으로 파일을 가져오고 파싱(Parsing, 분석)할 수 있습니다.


웹에 있는 txt 파일을 가져오는 샘플입니다. main.lua에 아래 코드를 넣으면 됩니다.

local function networkListener( e )
    if ( e.isError ) then
        print( "Network error!" )
    else
        print ( "RESPONSE: " .. e.response )
    end
end

network.request( "https://dl.dropboxusercontent.com/u/1486638/loadTest.txt", "GET", networkListener )

json 파일을 가져와서 파싱하는 예제입니다.

local json = require("json")

local function networkListener( e )
    if ( e.isError ) then
        print( "Network error!" )
    else
        local jsonData = json.decode(e.response)
        print(jsonData.data[3]) -- tomato
    end
end

network.request( "https://dl.dropboxusercontent.com/u/1486638/loadTest.json", "GET", networkListener )

[json 파일 내용]

{
    "data" : [
        "apple",
        "banana",
        "tomato"
    ]
}

위 json을 테이블뷰에 적용하는 예제입니다. main.lua의 내용을 모두 지우고 아래 코드를 넣으면 됩니다.

-- 기본 설정
display.setStatusBar(display.HiddenStatusBar)
display.setDefault("anchorX", 0)
display.setDefault("anchorY", 0)

-- 모듈 로드
local json = require ("json")
local widget = require ("widget")

-- 테이블뷰 생성
local function onRowRender(e)
    local row = e.row -- row.params, row.index, row.contentWidth, row.contentHeight
    local params = row.params
    local cWidth = row.contentWidth
    local cHeight = row.contentHeight
    
    local txt = display.newText(row, params.name, 10, 10, 0, 0, native.systemFontBold, 15)
    txt:setFillColor(0, 0, 0)
end

local tableView = widget.newTableView({
    width = 320,
    height = 480,
    noLines = true,
    onRowRender = onRowRender
})

-- json 로드
local function networkListener( e )
    if ( e.isError ) then
        print( "Network error!" )
    else
        local jsonData = json.decode(e.response)
        
        -- 테이블뷰의 Row 생성
        for k, v in pairs(jsonData.data) do
            tableView:insertRow({
                isCategory = false,
                params = {name=v}
            })
        end
    end
end

network.request( "https://dl.dropboxusercontent.com/u/1486638/loadTest.json", "GET", networkListener )


매거진의 이전글 코로나 시계 샘플
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari