จัดการข้อมูลซ้อนกัน
ทำงานกับโครงสร้างซับซ้อน
จัดการข้อมูลซ้อนกัน เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
ข้อมูลซ้อนกันอยู่ทุกที่
JSON ในโลกจริงแทบไม่แบนราบ ออบเจ็กต์มีออบเจ็กต์อื่นอยู่ภายใน และอาร์เรย์ก็มีออบเจ็กต์อยู่ภายใน โดยมักซ้อนกันหลายระดับ
ใน Lua นั่นหมายถึงมีตารางอยู่ภายในตาราง ข่าวดีคือ decode และ encode จัดการข้อมูลที่ซ้อนกันให้โดยอัตโนมัติ
ออบเจ็กต์ภายในออบเจ็กต์
เมื่อค่าของ JSON เป็นออบเจ็กต์อยู่ในตัวเอง ค่านั้นจะถูกถอดรหัสเป็นตาราง Lua ที่ซ้อนอยู่ภายใน คุณเข้าถึงข้อมูลชั้นลึกลงไปได้ด้วยการเข้าถึงฟิลด์ต่อกันเป็นสาย
local json = require("dkjson")
local d = json.decode('{"user": {"name": "Eve", "age": 30}}')
print(d.user.name)
print(d.user.age)อาร์เรย์ของออบเจ็กต์
โครงสร้างที่พบได้บ่อยมากคืออาร์เรย์ JSON ของออบเจ็กต์ ซึ่งมีลักษณะเหมือนรายการระเบียนข้อมูล โดยจะถูกถอดรหัสเป็นลำดับของตาราง
วนซ้ำด้วย ipairs แล้วอ่านฟิลด์จากแต่ละรายการ
local json = require("dkjson")
local d = json.decode('[{"id":1},{"id":2}]')
for _, item in ipairs(d) do
print(item.id)
endการเข้าถึงข้อมูลที่ซ้อนลึก
คุณสามารถเข้าถึงข้อมูลต่อกันได้ลึกเท่าที่ข้อมูลซ้อนอยู่ แต่ละระดับเป็นเพียงการค้นหาตารางอีกชั้นหนึ่ง
อย่างไรก็ตาม หากระดับกลางระดับใดขาดหายไป สายการเข้าถึงจะเกิดข้อผิดพลาดว่า 'พยายามใช้ดัชนีกับค่าที่ไม่มี'
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 ที่ซ้อนกัน เพียงซ้อนตาราง Lua ไว้ภายในกัน ตัวเข้ารหัสจะเดินสำรวจโครงสร้างทั้งหมดแบบเรียกตัวเองซ้ำ
local json = require("dkjson")
local t = {
user = { name = "Jo", roles = { "admin", "editor" } }
}
print(json.encode(t, { indent = true }))การแก้ไขค่าที่ซ้อนกัน
คุณสามารถอ่าน เปลี่ยนแปลง และเพิ่มฟิลด์ที่ระดับใดก็ได้ก่อนเข้ารหัสอีกครั้ง นี่คือหัวใจของการแปลงข้อมูล
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ระวังค่าว่างในข้อมูลซ้อน
ค่าว่างที่อยู่ลึกภายในข้อมูลซ้อนยังคงถูกถอดรหัสเป็น json.null ใน dkjson โปรดคำนึงถึงกรณีนี้เมื่อสำรวจโครงสร้าง เพื่อไม่ให้เข้าใจผิดว่าเป็นตารางหรือค่าจริง
local json = require("dkjson")
local d = json.decode('{"a":{"b": null}}')
if d.a.b == json.null then
print("b is null")
endตรวจสอบความเข้าใจ
ทดสอบความสามารถของคุณในการจัดการ JSON ที่ซ้อนกันใน Lua
ทบทวน
JSON ที่ซ้อนกันจะถูกแปลงเป็นตารางที่อยู่ภายในตาราง โดย decode และ encode จะจัดการการเรียกตัวเองซ้ำให้คุณ
เข้าถึงข้อมูลชั้นลึกด้วยการเข้าถึงต่อกัน แต่ป้องกันระดับที่ขาดหายไปด้วยสายโซ่ของตัวดำเนินการและ สร้างผลลัพธ์ที่ซ้อนกันด้วยการซ้อนตาราง Lua และอย่าลืมค่าว่างกับความแตกต่างระหว่างอาร์เรย์และออบเจ็กต์ในทุกระดับ
คำถามที่พบบ่อย
บทเรียน “จัดการข้อมูลซ้อนกัน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “จัดการข้อมูลซ้อนกัน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “จัดการข้อมูลซ้อนกัน”
ทำงานกับโครงสร้างซับซ้อน คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “จัดการข้อมูลซ้อนกัน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดจึงใช้ JSON
- ถอดรหัส JSON เป็นตาราง
- เข้ารหัสตารางเป็น JSON
- จัดการข้อมูลซ้อนกัน