IMCAT.DEV
로그인 가입
Lua 중급 자료구조

Lua 기본적인 JSON 처리

Lua 기본적인 JSON 처리 — 중급

기본적인 JSON 처리

1. 도입 (왜 배워야 하는가)

JSON(JavaScript Object Notation)은 웹 애플리케이션에서 데이터를 주고받는 데 널리 사용되는 형식입니다. 특히, Lua를 사용하는 게임 개발 및 임베디드 시스템에서도 JSON을 통해 서버와 클라이언트 간의 효율적인 데이터 교환이 가능해집니다. JSON을 처리할 수 없으면 데이터를 전송하거나 저장하는 과정에서 오류가 발생할 수 있으며, 이는 사용자 경험을 저하시킬 수 있습니다. 예를 들어, 사용자가 쇼핑몰에서 장바구니에 아이템을 추가할 때, 이 정보를 JSON 형식으로 서버에 전송하지 않으면 서버가 이를 이해하지 못하고 비정상적인 동작을 유발할 수 있습니다.

2. 핵심 개념 설명

JSON은 키-값 쌍으로 구성된 데이터 구조입니다. 이는 마치 우리가 일상 생활에서 사용하는 주소록과 같습니다. 주소록에는 사람의 이름과 전화번호가 쌍으로 저장되어 있죠. JSON의 기본 구조는 다음과 같습니다:

  • 객체: { "키": "값" }
  • 배열: [ "값1", "값2", "값3" ]
  • 용어설명
    객체키-값 쌍으로 구성된 데이터
    배열여러 값을 순서대로 저장하는 데이터
    직렬화데이터를 JSON 문자열로 변환하는 과정
    역직렬화JSON 문자열을 데이터로 변환하는 과정

    3. 기본 코드 예제

    다음은 Lua에서 JSON을 처리하기 위한 기본적인 코드 예제입니다.

    local json = require("json")  -- json 라이브러리 로드
    
    -- Lua 테이블 생성
    local data = {
        name = "홍길동",
        age = 30,
        hobbies = {"독서", "여행", "코딩"}
    }
    
    -- Lua 테이블을 JSON 문자열로 변환
    local jsonString = json.encode(data)
    
    print(jsonString)  -- JSON 문자열 출력

    실행 결과

    {"name":"홍길동","age":30,"hobbies":["독서","여행","코딩"]}

    코드 한 줄씩 동작 설명

    1. local json = require("json"): JSON 처리 기능을 제공하는 라이브러리를 로드합니다.
    2. local data = {...}: JSON으로 변환할 Lua 테이블을 정의합니다. 여기에는 이름, 나이, 취미가 포함되어 있습니다.
    3. local jsonString = json.encode(data): data 테이블을 JSON 문자열로 변환합니다.
    4. print(jsonString): 생성된 JSON 문자열을 출력합니다.
    5. 4. 실전 활용 예제

      예제 1: 사용자 정보 저장

      쇼핑몰의 사용자 정보를 JSON 형식으로 저장하고자 할 때 다음과 같이 사용할 수 있습니다.

      local user = {
          id = 1,
          name = "이순신",
          cart = {
              items = {
                  { productId = 101, quantity = 2 },
                  { productId = 102, quantity = 1 }
              }
          }
      }
      
      local userJson = json.encode(user)
      print(userJson)

      예제 2: API 응답 처리

      서버에서 JSON 형식으로 응답을 받을 때 이를 역직렬화하여 Lua 테이블로 변환할 수 있습니다.

      local response = '{"status":"success","data":{"id":1,"name":"김철수"}}'
      local result = json.decode(response)
      
      print(result.data.name)  -- "김철수" 출력

      5. 흔한 실수와 주의사항

    6. JSON 문자열의 형식 오류
    7. - 잘못된 코드:

           local invalidJson = '{"name":"홍길동" "age":30}'  -- 콤마 누락

      - 올바른 코드:

           local validJson = '{"name":"홍길동", "age":30}'  -- 올바른 형식
    8. 역직렬화 시 데이터 구조의 불일치
    9. - 잘못된 코드:

           local data = json.decode('{"name":"홍길동","age":"30"}')
           print(data.age + 1)  -- 문자열과 숫자 덧셈 오류 발생

      - 올바른 코드:

           local data = json.decode('{"name":"홍길동","age":30}')
           print(data.age + 1)  -- 정상 작동

      6. 정리

    10. JSON은 데이터 교환을 위한 중요한 형식이며, Lua에서도 손쉽게 처리할 수 있다.
    11. Lua 테이블과 JSON 간의 변환은 json.encode()와 json.decode()를 통해 이뤄진다.
    12. 실무에서 사용자 정보나 API 응답을 처리할 때 유용하게 사용된다.
    13. JSON의 형식 오류나 데이터 타입 불일치를 주의해야 한다.

다음에는 Lua의 비동기 처리나 HTTP 요청에 대해 학습하면 좋습니다. JSON을 통해 데이터를 주고받은 후, 이를 비동기적으로 처리하는 방법을 배우면 더욱 효율적인 웹 애플리케이션 개발에 도움이 될 것입니다.