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

ถอดรหัส 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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