0Pricing
Lua Academy · บทเรียน

เข้ารหัสตารางเป็น JSON

ทำข้อมูล Lua ให้เป็นอนุกรม

เข้ารหัสตารางเป็น JSON เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน 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 จะอยู่ในรูปแบบกะทัดรัด dkjson สามารถจัดรูปแบบผลลัพธ์ให้อ่านง่ายขึ้นได้ โดยส่งตารางตัวเลือกที่มี indent = true

ผลลัพธ์ที่จัดรูปแบบแล้วเหมาะอย่างยิ่งสำหรับไฟล์การตั้งค่าที่ผู้ใช้จะต้องแก้ไข

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 ในตารางเพื่อแทนค่า JSON null ได้ เพราะการกำหนดค่า nil จะลบคีย์นั้นออกทั้งหมด

หากต้องการส่งออกค่าว่างตามตัวอักษร ให้ใช้ตัวแทนพิเศษของไลบรารีอย่าง json.null เป็นค่า

local json = require("dkjson")
local t = { middle = json.null }
print(json.encode(t))  -- {"middle":null}

อาร์เรย์แบบเว้นช่วงทำงานผิดพลาด

หากลำดับมีช่องว่าง (เช่น ดัชนี 2 มีค่าไม่มี) Lua จะไม่ถือว่าเป็นอาร์เรย์ที่สมบูรณ์อีกต่อไป การเข้ารหัสอาจหยุดที่ช่องว่างหรือทำงานผิดปกติ

กำหนดให้ดัชนีอาร์เรย์ต่อเนื่องกันโดยเริ่มจาก 1 เพื่อให้ได้อาร์เรย์ JSON ที่คาดเดาได้

local json = require("dkjson")
local t = { [1] = "a", [3] = "c" }  -- gap at 2
print(json.encode(t))               -- unreliable

การเขียน JSON ลงไฟล์

หากต้องการเก็บข้อมูลไว้ถาวร ให้เข้ารหัสตารางเป็นสตริง แล้วเขียนสตริงนั้นลงไฟล์

นี่คือวิธีบันทึกการตั้งค่า คะแนน หรือสถานะที่มีโครงสร้างใด ๆ

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 จึงเข้ารหัสเป็นออบเจ็กต์ว่าง {} โดยค่าเริ่มต้น ไม่ใช่อาร์เรย์

หากต้องการอาร์เรย์ว่าง dkjson อนุญาตให้คุณกำกับตารางได้ มิฉะนั้นจะไม่สามารถระบุประเภทได้อย่างชัดเจน

local json = require("dkjson")
print(json.encode({}))  -- {}

ไม่รับประกันลำดับคีย์

ตาราง Lua ไม่มีลำดับโดยธรรมชาติสำหรับคีย์สตริง ดังนั้นลำดับของฟิลด์ใน JSON ที่เข้ารหัสแล้วอาจเปลี่ยนแปลงได้

อย่าพึ่งพาลำดับของฟิลด์ ผู้ใช้ JSON ควรค้นหาคีย์ด้วยชื่อ ไม่ใช่ด้วยตำแหน่ง

ความสอดคล้องของการไปกลับ

การเข้ารหัสแล้วถอดรหัสควรให้ตารางที่เทียบเท่ากันกลับมา การไปกลับนี้เป็นวิธีที่ดีในการทดสอบการจัดการข้อมูลของคุณ

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 ลำดับที่ใช้คีย์เป็นจำนวนเต็มจะกลายเป็นอาร์เรย์ ส่วนตารางที่ใช้คีย์เป็นสตริงจะกลายเป็นออบเจ็กต์

ใช้ json.null สำหรับค่าว่างตามตัวอักษร รักษาให้อาร์เรย์ต่อเนื่องกัน และส่ง indent = true เพื่อให้ได้ผลลัพธ์ที่อ่านง่าย ขั้นต่อไปคุณจะจัดการกับข้อมูลที่ซ้อนกันอย่างลึก

คำถามที่พบบ่อย

บทเรียน “เข้ารหัสตารางเป็น JSON” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “เข้ารหัสตารางเป็น JSON” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “เข้ารหัสตารางเป็น JSON”

ทำข้อมูล Lua ให้เป็นอนุกรม คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “เข้ารหัสตารางเป็น JSON” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม

ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุใดจึงใช้ JSON
  2. ถอดรหัส JSON เป็นตาราง
  3. เข้ารหัสตารางเป็น JSON
  4. จัดการข้อมูลซ้อนกัน
← กลับไปที่ Lua Academy