중첩 데이터 처리하기
복잡한 구조를 다뤄 보세요.
중첩 데이터 처리하기은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
중첩 데이터는 어디에나 있습니다
실제 JSON은 평평한 구조인 경우가 드뭅니다. 객체 안에 객체가 들어 있고, 배열 안에 객체가 들어 있으며, 여러 단계로 깊게 중첩되기도 합니다.
Lua에서는 이것이 테이블 안의 테이블을 의미합니다. 다행히 decode와 encode가 중첩을 자동으로 처리합니다.
객체 안의 객체
JSON 값 자체가 객체이면 중첩된 Lua 테이블로 decode됩니다. 연결된 필드 접근을 사용해 안쪽을 단계적으로 조회합니다.
local json = require("dkjson")
local d = json.decode('{"user": {"name": "Eve", "age": 30}}')
print(d.user.name)
print(d.user.age)객체의 배열
매우 흔한 구조는 레코드 목록과 같은 JSON 객체 배열입니다. 이는 테이블의 시퀀스로 decode됩니다.
ipairs로 반복하면서 각 항목의 필드를 읽으십시오.
local json = require("dkjson")
local d = json.decode('[{"id":1},{"id":2}]')
for _, item in ipairs(d) do
print(item.id)
end깊게 중첩된 데이터에 접근하기
데이터가 깊은 만큼 연결해서 접근할 수 있습니다. 각 단계는 그저 또 하나의 테이블 조회일 뿐입니다.
하지만 중간 단계 중 하나라도 없으면 'nil 값의 인덱스를 사용하려는 시도'라는 오류가 발생합니다.
local json = require("dkjson")
local d = json.decode('{"a":{"b":{"c": 42}}}')
print(d.a.b.c)중첩 데이터에 안전하게 접근하기
누락된 단계로 인한 충돌을 피하려면 각 단계를 확인하거나 and의 단락 평가를 사용하십시오.
and 연결은 첫 nil에서 멈추고 오류 대신 nil을 반환합니다.
local json = require("dkjson")
local d = json.decode('{"a":{}}')
local c = d.a and d.a.b and d.a.b.c
print(c) -- nil, no crash중첩된 배열 순회하기
배열에는 더 많은 배열을 포함하는 객체가 들어갈 수 있습니다. 구조에 맞게 반복문을 중첩하십시오.
local json = require("dkjson")
local d = json.decode('[{"tags":["a","b"]}]')
for _, rec in ipairs(d) do
for _, tag in ipairs(rec.tags) do
print(tag)
end
end중첩된 테이블 만들기
중첩된 JSON을 encode하려면 Lua 테이블을 중첩하기만 하면 됩니다. 인코더가 전체 구조를 재귀적으로 순회합니다.
local json = require("dkjson")
local t = {
user = { name = "Jo", roles = { "admin", "editor" } }
}
print(json.encode(t, { indent = true }))중첩된 값 수정하기
다시 encode하기 전에 어느 깊이에서든 필드를 읽고 변경하고 추가할 수 있습니다. 이것이 데이터 변환의 핵심입니다.
local json = require("dkjson")
local d = json.decode('{"cfg":{"volume":5}}')
d.cfg.volume = 8
d.cfg.muted = false
print(json.encode(d))배열과 객체 섞기
JSON은 서로 다른 수준에서 배열과 객체를 자유롭게 섞습니다. Lua에서는 시퀀스 테이블과 키 기반 테이블을 함께 중첩하여 이를 표현합니다.
각 테이블이 한쪽 구조로 일관되게 유지되도록 하십시오.
local json = require("dkjson")
local t = {
team = "red",
members = { { id = 1 }, { id = 2 } }
}
print(json.encode(t))알 수 없는 구조 순회하기
사전에 구조를 알 수 없을 때는 type()으로 각 값을 검사하고 테이블에 대해 재귀적으로 처리하십시오.
이를 통해 임의의 JSON을 처리하는 범용 프로세서를 작성할 수 있습니다.
local function walk(v)
if type(v) == "table" then
for k, sub in pairs(v) do walk(sub) end
else
print(v)
end
end중첩 구조에서 null 주의하기
중첩 데이터 깊은 곳의 null도 dkjson에서는 json.null로 decode됩니다. 구조를 순회할 때 이를 고려하여 실제 테이블이나 값으로 잘못 판단하지 않도록 하십시오.
local json = require("dkjson")
local d = json.decode('{"a":{"b": null}}')
if d.a.b == json.null then
print("b is null")
end빠른 확인
Lua에서 중첩된 JSON을 처리하는 방법을 테스트해 보십시오.
복습
중첩된 JSON은 테이블 안의 테이블로 매핑되며, decode와 encode가 재귀 처리를 대신 해 줍니다.
연결된 접근으로 안쪽을 조회하되, and 연결을 사용해 누락된 단계에 대비하십시오. Lua 테이블을 중첩하여 중첩된 출력을 만들고, 모든 깊이에서 null과 배열 및 객체의 구분을 기억하십시오.
자주 묻는 질문
“중첩 데이터 처리하기” 강의는 무료인가요?
네 — “중첩 데이터 처리하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“중첩 데이터 처리하기”에서 뭘 배우나요?
복잡한 구조를 다뤄 보세요. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Lua Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“중첩 데이터 처리하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.