ถอดรหัส JSON เป็นตาราง
แยกวิเคราะห์สตริง JSON
ถอดรหัส JSON เป็นตาราง เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
พื้นฐานการถอดรหัส
การถอดรหัสจะแปลงสตริง JSON ให้เป็นค่าของ Lua ที่คุณนำไปใช้งานได้ จุดเริ่มต้นคือ json.decode(text)
หาก JSON ระดับบนสุดเป็นวัตถุ คุณจะได้ตาราง Lua ที่มีคีย์เป็นสตริง แต่หากเป็นอาร์เรย์ คุณจะได้ตารางที่มีดัชนีตัวเลข
local json = require("dkjson")
local data = json.decode('{"id": 7}')
print(data.id)การอ่านฟิลด์ของวัตถุ
วัตถุ JSON ที่ถอดรหัสแล้วจะทำงานเหมือนตาราง Lua ทั่วไป เข้าถึงค่าต่าง ๆ ได้ด้วยรูปแบบจุดหรือวงเล็บเหลี่ยม
คีย์ที่ไม่ใช่ตัวระบุ Lua ที่ถูกต้อง เช่น คีย์ที่มีช่องว่าง ต้องใช้รูปแบบวงเล็บเหลี่ยม
local json = require("dkjson")
local u = json.decode('{"name": "Mia", "full name": "Mia Lee"}')
print(u.name)
print(u["full name"])การถอดรหัสอาร์เรย์
อาร์เรย์ JSON จะถูกถอดรหัสเป็นตารางลำดับของ Lua ที่มีดัชนีเริ่มต้นที่ 1 คุณวนดูข้อมูลได้ด้วย ipairs หรือลูปตัวเลข
จำไว้ว่าอาร์เรย์ Lua เริ่มที่ดัชนี 1 ไม่ใช่ 0
local json = require("dkjson")
local nums = json.decode('[10, 20, 30]')
for i, v in ipairs(nums) do
print(i, v)
endตัวเลขและค่าบูลีน
ตัวเลข JSON จะถูกถอดรหัสเป็นตัวเลข Lua และ true/false ของ JSON จะถูกถอดรหัสเป็นค่าบูลีนของ Lua
หลังถอดรหัสแล้ว คุณสามารถใช้ค่าเหล่านี้โดยตรงในการคำนวณหรือในเงื่อนไขได้
local json = require("dkjson")
local d = json.decode('{"qty": 3, "paid": false}')
if not d.paid then
print("unpaid, qty =", d.qty)
endการจัดการค่าว่าง
ค่าว่างของ JSON จัดการได้ยาก เพราะ nil ของ Lua จะลบคีย์ออกจากตาราง ไลบรารีแต่ละตัวจัดการเรื่องนี้แตกต่างกัน
dkjson จะถอดรหัส null เป็นค่าพิเศษ json.null เพื่อให้คีย์ยังคงอยู่ คุณจึงเปรียบเทียบกับค่านี้เพื่อตรวจจับค่าว่างได้
local json = require("dkjson")
local d = json.decode('{"mid": null}')
if d.mid == json.null then
print("mid is null")
endการถอดรหัสจากไฟล์
บ่อยครั้ง JSON จะอยู่ในไฟล์ ให้อ่านไฟล์ทั้งหมดเป็นสตริงก่อน แล้วจึงถอดรหัสสตริงนั้น
รูปแบบนี้ใช้กันทั่วไปเมื่อต้องโหลดการตั้งค่าหรือสถานะเกมที่บันทึกไว้
local json = require("dkjson")
local f = io.open("config.json", "r")
local text = f:read("*a")
f:close()
local cfg = json.decode(text)
print(cfg.theme)ค่าที่คืนมาสามค่า
decode ของ dkjson อาจคืนค่าได้สูงสุดสามค่า ได้แก่ ผลลัพธ์ที่ถอดรหัสแล้ว ตำแหน่งที่การแยกวิเคราะห์หยุดลง และข้อความแสดงข้อผิดพลาด
เมื่อสำเร็จ ผลลัพธ์จะไม่เป็นค่าว่าง แต่เมื่อไม่สำเร็จ ผลลัพธ์จะเป็นค่าว่าง และค่าที่สามจะอธิบายสาเหตุ
local json = require("dkjson")
local obj, pos, err = json.decode('{"a":1}')
print(obj.a, pos, err)การตรวจสอบข้อมูลเข้า
อย่าไว้วางใจ JSON จากภายนอกโดยไม่ตรวจสอบ ตรวจสอบผลลัพธ์เสมอก่อนนำไปใช้ เพื่อไม่ให้ข้อมูลส่งเข้าที่มีรูปแบบผิดทำให้โปรแกรมหยุดทำงาน
local json = require("dkjson")
local function safeDecode(s)
local v, _, err = json.decode(s)
if not v then return nil, err end
return v
endความแตกต่างของ cjson
lua-cjson ทำงานคล้ายกัน แต่จะแจ้งข้อผิดพลาดเมื่อข้อมูลเข้าไม่ถูกต้อง แทนที่จะคืนค่าข้อผิดพลาด ให้ห่อการเรียกใช้ด้วย pcall เพื่อความปลอดภัย
cjson ทำงานได้เร็วกว่า ซึ่งสำคัญเมื่อมีการแยกวิเคราะห์ข้อมูลปริมาณมาก
local cjson = require("cjson")
local ok, data = pcall(cjson.decode, '{"x":1}')
if ok then print(data.x) else print("error") endคีย์ที่ไม่มีอยู่จะได้ค่าว่าง
หากคุณอ่านคีย์ที่ไม่มีอยู่ใน JSON Lua จะคืนค่า nil ให้ตามปกติ นี่เป็นพฤติกรรมปกติและไม่ทำให้เกิดข้อผิดพลาด
ใช้ค่าใช้แทนร่วมกับ or เพื่อกำหนดค่าเริ่มต้นให้ฟิลด์ที่ไม่บังคับ
local json = require("dkjson")
local d = json.decode('{"name": "Sam"}')
local age = d.age or 0
print(d.name, age)ตารางว่างมีความกำกวม
ทั้งวัตถุ JSON ว่าง {} และอาร์เรย์ JSON ว่าง [] จะถูกถอดรหัสเป็นตาราง Lua ว่าง หลังถอดรหัสแล้วคุณไม่อาจทราบได้ว่าเดิมเป็นแบบใด
เรื่องนี้สำคัญเป็นหลักเมื่อต้องเข้ารหัสกลับ โปรดคำนึงถึงความกำกวมนี้เมื่อแปลงข้อมูลไปกลับ
ตรวจสอบอย่างรวดเร็ว
ตรวจสอบสิ่งที่คุณเรียนรู้เกี่ยวกับการถอดรหัส JSON
สรุปทบทวน
การถอดรหัสจะแปลงข้อความ JSON เป็นตาราง Lua โดยวัตถุจะกลายเป็นตารางที่มีคีย์เป็นสตริง และอาร์เรย์จะกลายเป็นลำดับที่มีดัชนีเริ่มต้นที่ 1
ตรวจสอบผลลัพธ์เสมอ จัดการค่าว่างด้วยค่าพิเศษของไลบรารี และจำไว้ว่าคีย์ที่ไม่มีอยู่จะมีค่าเป็นค่าว่าง ต่อไปคุณจะได้เรียนรู้การเข้ารหัสตาราง Lua กลับเป็น JSON
คำถามที่พบบ่อย
บทเรียน “ถอดรหัส JSON เป็นตาราง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ถอดรหัส JSON เป็นตาราง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ถอดรหัส JSON เป็นตาราง”
แยกวิเคราะห์สตริง JSON คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ถอดรหัส JSON เป็นตาราง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดจึงใช้ JSON
- ถอดรหัส JSON เป็นตาราง
- เข้ารหัสตารางเป็น JSON
- จัดการข้อมูลซ้อนกัน