เข้ารหัสตารางเป็น 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดจึงใช้ JSON
- ถอดรหัส JSON เป็นตาราง
- เข้ารหัสตารางเป็น JSON
- จัดการข้อมูลซ้อนกัน