테이블을 JSON으로 인코딩하기
Lua 데이터를 직렬화해 보세요.
테이블을 JSON으로 인코딩하기은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
인코딩 기초
인코딩은 디코딩의 반대입니다. Lua 테이블을 JSON 문자열로 변환합니다. json.encode(table)을 호출하세요.
결과는 파일에 쓰거나 네트워크로 전송할 수 있는 한 줄 문자열입니다.
local json = require("dkjson")
local t = { name = "Leo", age = 9 }
print(json.encode(t))객체와 배열 비교
Lua 테이블이 어떻게 인코딩되는지는 키에 따라 달라집니다. 1부터 시작하는 연속된 정수 키를 가진 테이블은 JSON 배열이 됩니다.
문자열 키를 가진 테이블은 JSON 객체가 됩니다. 키가 섞인 테이블은 모호하므로 피해야 합니다.
local json = require("dkjson")
print(json.encode({ 1, 2, 3 })) -- [1,2,3]
print(json.encode({ a = 1, b = 2 })) -- {"a":1,"b":2}가독성 높은 출력
기본적으로 JSON은 압축된 형태입니다. 가독성을 높이기 위해 indent = true 옵션 테이블을 전달하면 dkjson이 출력을 들여쓸 수 있습니다.
사람이 편집할 설정 파일에는 가독성 높은 출력이 매우 유용합니다.
local json = require("dkjson")
local t = { name = "Ann", roles = { "dev", "lead" } }
print(json.encode(t, { indent = true }))숫자와 불리언 인코딩
Lua의 숫자와 불리언은 각각 대응하는 JSON 값으로 직접 인코딩됩니다. 정수와 실수는 모두 JSON 숫자가 됩니다.
local json = require("dkjson")
local t = { count = 5, ratio = 1.5, active = true }
print(json.encode(t))nil 문제
테이블에 nil을 저장해 JSON null을 의미하도록 할 수 없습니다. nil을 할당하면 키가 완전히 제거되기 때문입니다.
리터럴 null을 출력하려면 라이브러리의 센티널 json.null을 값으로 사용하십시오.
local json = require("dkjson")
local t = { middle = json.null }
print(json.encode(t)) -- {"middle":null}희소 배열의 문제
시퀀스에 빈틈(예를 들어 인덱스 2가 nil)이 있으면 Lua는 더 이상 이를 연속된 배열로 취급하지 않습니다. 인코딩이 그 빈틈에서 중단되거나 이상하게 동작할 수 있습니다.
예측 가능한 JSON 배열을 만들려면 배열 인덱스를 1부터 시작하여 끊김 없이 유지하십시오.
local json = require("dkjson")
local t = { [1] = "a", [3] = "c" } -- gap at 2
print(json.encode(t)) -- unreliableJSON을 파일에 쓰기
데이터를 영구 저장하려면 테이블을 문자열로 encode하고 그 문자열을 파일에 쓰십시오.
이렇게 설정, 점수 또는 구조화된 상태를 저장할 수 있습니다.
local json = require("dkjson")
local data = { theme = "dark", volume = 8 }
local f = io.open("settings.json", "w")
f:write(json.encode(data, { indent = true }))
f:close()빈 테이블은 기본적으로 객체가 됩니다
빈 Lua 테이블 {}에는 키가 없으므로 dkjson은 기본적으로 이를 배열이 아닌 빈 객체 {}로 encode합니다.
빈 배열이 필요하면 dkjson에서 테이블에 태그를 지정할 수 있습니다. 그렇지 않으면 유형이 모호합니다.
local json = require("dkjson")
print(json.encode({})) -- {}키 순서는 보장되지 않습니다
Lua 테이블에는 문자열 키의 고유한 순서가 없으므로 encode된 JSON의 필드 순서가 달라질 수 있습니다.
필드 순서에 의존하지 마십시오. JSON 소비자는 위치가 아니라 이름으로 키를 조회해야 합니다.
왕복 변환의 일관성
encode한 다음 decode하면 동등한 테이블을 얻어야 합니다. 이 왕복 변환은 데이터 처리를 테스트하는 좋은 방법입니다.
local json = require("dkjson")
local orig = { a = 1, list = { 2, 3 } }
local copy = json.decode(json.encode(orig))
print(copy.a, copy.list[2])cjson으로 인코딩하기
lua-cjson도 encode를 제공합니다. 더 빠르지만 서식 지정 옵션이 적고 오류를 반환하는 대신 오류를 발생시킵니다.
들여쓴 가독성 높은 출력을 원한다면 보통 dkjson이 더 사용하기 편리한 선택입니다.
local cjson = require("cjson")
local s = cjson.encode({ ok = true, n = 42 })
print(s)빠른 확인
Lua 테이블 인코딩에 대한 이해도를 테스트해 보십시오.
복습
인코딩은 Lua 테이블을 JSON 문자열로 변환합니다. 정수 키로 구성된 시퀀스는 배열이 되고 문자열 키를 사용하는 테이블은 객체가 됩니다.
리터럴 null에는 json.null을 사용하고, 배열은 끊김 없이 유지하며, 가독성 있는 출력을 위해 indent = true를 전달하십시오. 다음으로는 깊게 중첩된 데이터를 다룹니다.
자주 묻는 질문
“테이블을 JSON으로 인코딩하기” 강의는 무료인가요?
네 — “테이블을 JSON으로 인코딩하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“테이블을 JSON으로 인코딩하기”에서 뭘 배우나요?
Lua 데이터를 직렬화해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Lua Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“테이블을 JSON으로 인코딩하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- JSON을 사용하는 이유
- JSON을 테이블로 디코딩하기
- 테이블을 JSON으로 인코딩하기
- 중첩 데이터 처리하기