학습
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":["독서","여행","코딩"]}
코드 한 줄씩 동작 설명
local json = require("json"): JSON 처리 기능을 제공하는 라이브러리를 로드합니다.local data = {...}: JSON으로 변환할 Lua 테이블을 정의합니다. 여기에는 이름, 나이, 취미가 포함되어 있습니다.local jsonString = json.encode(data):data테이블을 JSON 문자열로 변환합니다.print(jsonString): 생성된 JSON 문자열을 출력합니다.- JSON 문자열의 형식 오류
- 역직렬화 시 데이터 구조의 불일치
- JSON은 데이터 교환을 위한 중요한 형식이며, Lua에서도 손쉽게 처리할 수 있다.
- Lua 테이블과 JSON 간의 변환은
json.encode()와json.decode()를 통해 이뤄진다. - 실무에서 사용자 정보나 API 응답을 처리할 때 유용하게 사용된다.
- JSON의 형식 오류나 데이터 타입 불일치를 주의해야 한다.
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. 흔한 실수와 주의사항
- 잘못된 코드:
local invalidJson = '{"name":"홍길동" "age":30}' -- 콤마 누락
- 올바른 코드:
local validJson = '{"name":"홍길동", "age":30}' -- 올바른 형식
- 잘못된 코드:
local data = json.decode('{"name":"홍길동","age":"30"}')
print(data.age + 1) -- 문자열과 숫자 덧셈 오류 발생
- 올바른 코드:
local data = json.decode('{"name":"홍길동","age":30}')
print(data.age + 1) -- 정상 작동
6. 정리
다음에는 Lua의 비동기 처리나 HTTP 요청에 대해 학습하면 좋습니다. JSON을 통해 데이터를 주고받은 후, 이를 비동기적으로 처리하는 방법을 배우면 더욱 효율적인 웹 애플리케이션 개발에 도움이 될 것입니다.