Lua Academy · Pelajaran

Mengendalikan Data Bersarang

Bekerja dengan struktur kompleks.

Pelajaran 4 daripada 413 langkah

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)
end

Capaian 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 crash

Mengulang 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
end

Membina 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
end

Berwaspada 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")
end

Semakan 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.

Percuma untuk bermula

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

  1. Mengapa JSON
  2. Menyahkod JSON kepada Jadual
  3. Mengekod Jadual kepada JSON
  4. Mengendalikan Data Bersarang
← Kembali ke Lua Academy