Mengendalikan Data Bersarang
Bekerja dengan struktur kompleks.
Mengendalikan Data Bersarang ialah pelajaran Lua Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Lua Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.
Data Bersarang Ada di Mana-mana
JSON dunia sebenar jarang berbentuk rata. Objek mengandungi objek, dan tatasusunan mengandungi objek, selalunya hingga beberapa aras kedalaman.
Dalam Lua, ini bermaksud jadual di dalam jadual. Berita baiknya: decode dan encode mengendalikan persarangan secara automatik.
Objek di Dalam Objek
Apabila nilai JSON itu sendiri ialah objek, nilai tersebut dinyahkodkan menjadi jadual Lua bersarang. Anda boleh pergi ke aras yang lebih dalam melalui capaian medan berantai.
local json = require("dkjson")
local d = json.decode('{"user": {"name": "Eve", "age": 30}}')
print(d.user.name)
print(d.user.age)Tatasusunan Objek
Bentuk yang sangat biasa ialah tatasusunan JSON yang mengandungi objek, seperti senarai rekod. Ia dinyahkodkan menjadi jujukan jadual.
Ulang dengan ipairs dan baca medan daripada setiap item.
local json = require("dkjson")
local d = json.decode('[{"id":1},{"id":2}]')
for _, item in ipairs(d) do
print(item.id)
endCapaian Bersarang Secara Mendalam
Anda boleh merantaikan capaian sedalam mana pun struktur data itu. Setiap aras hanyalah carian jadual yang lain.
Namun, jika mana-mana aras perantaraan tiada, rantaian itu menghasilkan ralat dengan mesej 'cubaan untuk mengindeks nilai nil'.
local json = require("dkjson")
local d = json.decode('{"a":{"b":{"c": 42}}}')
print(d.a.b.c)Capaian Bersarang yang Selamat
Untuk mengelakkan ranap apabila aras tiada, semak setiap langkah atau gunakan pemendekan litar dengan and.
Rantaian and berhenti pada nil pertama dan mengembalikan nil, bukannya menghasilkan ralat.
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 crashMengulang Tatasusunan Bersarang
Tatasusunan boleh mengandungi objek yang mengandungi lebih banyak tatasusunan. Susun gelung anda mengikut struktur tersebut.
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
endMembina Jadual Bersarang
Untuk mengekod JSON bersarang, hanya sarangkan jadual Lua. Pengekod akan melintasi keseluruhan struktur secara rekursif.
local json = require("dkjson")
local t = {
user = { name = "Jo", roles = { "admin", "editor" } }
}
print(json.encode(t, { indent = true }))Mengubah Suai Nilai Bersarang
Anda boleh membaca, mengubah, dan menambah medan pada sebarang aras sebelum mengekodkannya semula. Inilah asas 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))Mencampurkan Tatasusunan dan Objek
JSON mencampurkan tatasusunan dan objek secara bebas pada aras yang berbeza. Lua mencerminkannya melalui jadual jujukan dan jadual berkunci yang disarang bersama.
Pastikan setiap jadual secara konsisten mempunyai satu bentuk atau bentuk yang lain.
local json = require("dkjson")
local t = {
team = "red",
members = { { id = 1 }, { id = 2 } }
}
print(json.encode(t))Menelusuri Struktur yang Tidak Diketahui
Apabila anda tidak mengetahui bentuk struktur lebih awal, gunakan type() untuk memeriksa setiap nilai dan lakukan rekursi ke dalam jadual.
Ini membolehkan anda menulis pemproses umum untuk sebarang JSON.
local function walk(v)
if type(v) == "table" then
for k, sub in pairs(v) do walk(sub) end
else
print(v)
end
endBerwaspada terhadap null dalam Persarangan
Nilai null yang jauh di dalam data bersarang masih dinyahkodkan sebagai json.null dalam dkjson. Ambil kira perkara ini semasa menelusuri struktur supaya anda tidak tersilap menganggapnya sebagai jadual atau nilai sebenar.
local json = require("dkjson")
local d = json.decode('{"a":{"b": null}}')
if d.a.b == json.null then
print("b is null")
endSemakan Pantas
Uji pengendalian anda terhadap JSON bersarang dalam Lua.
Imbas Kembali
JSON bersarang dipetakan kepada jadual di dalam jadual; decode dan encode mengendalikan rekursi untuk anda.
Gunakan capaian berantai untuk pergi ke aras yang lebih dalam, tetapi lindungi kod anda daripada aras yang tiada menggunakan rantaian and. Bina keluaran bersarang dengan menyarangkan jadual Lua, dan ingat nilai null serta perbezaan antara tatasusunan dengan objek pada setiap aras.
Pelajari Lua dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 40
- Pelajaran
- 159
Soalan Lazim
Adakah pelajaran “Mengendalikan Data Bersarang” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Lua Academy, termasuk “Mengendalikan Data Bersarang”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Mengendalikan Data Bersarang”?
Bekerja dengan struktur kompleks. Anda berlatih Lua Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Lua Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Lua Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Mengendalikan Data Bersarang” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Lua Academy ini?
Ya. Setiap pelajaran Lua Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Mengapa JSON
- Menyahkod JSON kepada Jadual
- Mengekod Jadual kepada JSON
- Mengendalikan Data Bersarang