Menangani Data Bertingkat
Bekerja dengan struktur kompleks.
Menangani Data Bertingkat adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.
Data Bersarang Ada di Mana-Mana
JSON dunia nyata jarang datar. Objek berisi objek, dan larik berisi objek, sering kali hingga beberapa tingkat.
Di Lua, ini berarti tabel di dalam tabel. Kabar baiknya, decode dan encode menangani penyarangan secara otomatis.
Objek di Dalam Objek
Ketika sebuah nilai JSON itu sendiri berupa objek, nilai tersebut didekodekan menjadi tabel Lua bersarang. Telusuri ke dalamnya dengan akses bidang berantai.
local json = require("dkjson")
local d = json.decode('{"user": {"name": "Eve", "age": 30}}')
print(d.user.name)
print(d.user.age)Larik Berisi Objek
Bentuk yang sangat umum adalah larik JSON berisi objek, seperti daftar rekaman. Bentuk ini didekodekan menjadi urutan tabel.
Lakukan perulangan dengan ipairs dan baca bidang dari setiap item.
local json = require("dkjson")
local d = json.decode('[{"id":1},{"id":2}]')
for _, item in ipairs(d) do
print(item.id)
endAkses Bersarang Mendalam
Anda dapat merangkai akses sedalam data tersebut. Setiap tingkat hanyalah pencarian tabel lainnya.
Namun, jika tingkat perantara mana pun tidak ada, rantai tersebut menghasilkan kesalahan dengan pesan 'mencoba mengindeks nilai nil'.
local json = require("dkjson")
local d = json.decode('{"a":{"b":{"c": 42}}}')
print(d.a.b.c)Akses Bersarang yang Aman
Untuk menghindari kerusakan akibat tingkat yang tidak ada, periksa setiap langkah atau gunakan hubungan arus pendek and.
Rantai and berhenti pada nil pertama dan mengembalikan nil, bukan menghasilkan kesalahan.
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 crashMelakukan Perulangan pada Larik Bersarang
Larik dapat berisi objek yang memuat larik lainnya. Susun perulangan bersarang agar sesuai dengan strukturnya.
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
endMembangun Tabel Bersarang
Untuk mengodekan JSON bersarang, cukup sarangkan tabel Lua. Pengode berjalan menelusuri seluruh struktur secara rekursif.
local json = require("dkjson")
local t = {
user = { name = "Jo", roles = { "admin", "editor" } }
}
print(json.encode(t, { indent = true }))Mengubah Nilai Bersarang
Anda dapat membaca, mengubah, dan melakukan add pada bidang di kedalaman apa pun sebelum melakukan pengodean ulang. Inilah inti transformasi data.
local json = require("dkjson")
local d = json.decode('{"cfg":{"volume":5}}')
d.cfg.volume = 8
d.cfg.muted = false
print(json.encode(d))Mencampur Larik dan Objek
JSON bebas mencampur larik dan objek pada berbagai tingkat. Lua mencerminkannya melalui tabel urutan dan tabel berkunci yang disarangkan bersama.
Pastikan setiap tabel secara konsisten memiliki salah satu bentuk tersebut.
local json = require("dkjson")
local t = {
team = "red",
members = { { id = 1 }, { id = 2 } }
}
print(json.encode(t))Menelusuri Struktur yang Tidak Dikenal
Jika Anda belum mengetahui bentuknya, gunakan type() untuk memeriksa setiap nilai dan melakukan rekursi ke dalam tabel.
Dengan begitu, Anda dapat menulis pemroses umum untuk JSON sembarang.
local function walk(v)
if type(v) == "table" then
for k, sub in pairs(v) do walk(sub) end
else
print(v)
end
endWaspadai null dalam Data Bersarang
null yang berada jauh di dalam data bersarang tetap didekodekan menjadi json.null dalam dkjson. Perhitungkan hal ini saat menelusuri struktur agar Anda tidak keliru menganggapnya sebagai tabel atau nilai sebenarnya.
local json = require("dkjson")
local d = json.decode('{"a":{"b": null}}')
if d.a.b == json.null then
print("b is null")
endPemeriksaan Singkat
Uji kemampuan Anda menangani JSON bersarang dalam Lua.
Ringkasan
JSON bersarang dipetakan menjadi tabel di dalam tabel; decode dan encode menangani rekursinya untuk Anda.
Telusuri ke dalam dengan akses berantai, tetapi lindungi diri dari tingkat yang tidak ada menggunakan rantai and. Bangun output bersarang dengan menyarangkan tabel Lua, dan ingat null serta perbedaan larik dan objek pada setiap tingkat.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menangani Data Bertingkat” gratis?
Ya — teks lengkap “Menangani Data Bertingkat” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Menangani Data Bertingkat”?
Bekerja dengan struktur kompleks. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Lua Academy?
Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Menangani Data Bertingkat” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?
Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengapa JSON
- Mendekode JSON Menjadi Tabel
- Menyandikan Tabel Menjadi JSON
- Menangani Data Bertingkat