Lua Academy · Lektion

Håndtér indlejrede data

Arbejd med komplekse strukturer.

Lektion 4 af 413 trin

Håndtér indlejrede data er en gratis Lua Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lua Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lua Academy-kurset indeholder 4 lektioner i alt.

Indlejrede data findes overalt

JSON fra den virkelige verden er sjældent fladt. Objekter indeholder objekter, og arrays indeholder objekter, ofte i flere niveauer.

I Lua betyder det tabeller inde i tabeller. Den gode nyhed er, at decode og encode automatisk håndterer indlejring.

Et objekt i et objekt

Når en JSON-værdi selv er et objekt, afkodes den til en indlejret Lua-tabel. Du går ned gennem strukturen med kædet feltadgang.

local json = require("dkjson")
local d = json.decode('{"user": {"name": "Eve", "age": 30}}')
print(d.user.name)
print(d.user.age)

Et array af objekter

En meget almindelig struktur er et JSON-array af objekter, for eksempel en liste over poster. Det afkodes til en sekvens af tabeller.

Brug ipairs til at gennemløbe sekvensen, og læs felterne fra hvert element.

local json = require("dkjson")
local d = json.decode('[{"id":1},{"id":2}]')
for _, item in ipairs(d) do
  print(item.id)
end

Adgang til dybt indlejrede data

Du kan kæde opslag så dybt, som dataene rækker. Hvert niveau er blot endnu et opslag i en tabel.

Hvis et mellemliggende niveau mangler, giver kæden dog fejlen 'forsøg på at indeksere en nil-værdi'.

local json = require("dkjson")
local d = json.decode('{"a":{"b":{"c": 42}}}')
print(d.a.b.c)

Sikker adgang til indlejrede data

Hvis du vil undgå nedbrud på grund af manglende niveauer, skal du kontrollere hvert trin eller bruge kortslutning med and.

Kæden med and stopper ved den første nil og returnerer nil i stedet for at give en fejl.

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

Gennemløb af indlejrede arrays

Arrays kan indeholde objekter, som igen indeholder flere arrays. Indlejr dine løkker, så de følger strukturen.

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

Opbygning af indlejrede tabeller

Hvis du vil kode indlejret JSON, skal du blot indlejre Lua-tabeller. Koderen gennemløber hele strukturen rekursivt.

local json = require("dkjson")
local t = {
  user = { name = "Jo", roles = { "admin", "editor" } }
}
print(json.encode(t, { indent = true }))

Ændring af indlejrede værdier

Du kan læse, ændre og tilføje felter på ethvert niveau, før du koder dataene igen. Det er kernen i at omforme data.

local json = require("dkjson")
local d = json.decode('{"cfg":{"volume":5}}')
d.cfg.volume = 8
d.cfg.muted = false
print(json.encode(d))

Blanding af arrays og objekter

JSON blander frit arrays og objekter på forskellige niveauer. Lua afspejler dette med sekvenstabeller og tabeller med nøgler, der er indlejret i hinanden.

Sørg blot for, at hver tabel konsekvent har den ene eller den anden struktur.

local json = require("dkjson")
local t = {
  team = "red",
  members = { { id = 1 }, { id = 2 } }
}
print(json.encode(t))

Gennemløb af ukendte strukturer

Når du ikke kender strukturen på forhånd, kan du bruge type() til at undersøge hver værdi og rekursivt gå ind i tabeller.

Det gør det muligt at skrive generelle behandlere til vilkårlig 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

Hold øje med null i indlejrede data

En null-værdi dybt inde i indlejrede data afkodes stadig til json.null i dkjson. Tag højde for den, når du gennemløber strukturer, så du ikke forveksler den med en rigtig tabel eller værdi.

local json = require("dkjson")
local d = json.decode('{"a":{"b": null}}')
if d.a.b == json.null then
  print("b is null")
end

Hurtigt tjek

Test din håndtering af indlejret JSON i Lua.

Opsummering

Indlejret JSON afspejles i tabeller inde i tabeller. decode og encode håndterer rekursionen for dig.

Gå ned gennem strukturen med kædet adgang, men beskyt dig mod manglende niveauer ved hjælp af and-kæder. Opbyg indlejret resultatdata ved at indlejre Lua-tabeller, og husk null-værdier samt forskellen mellem arrays og objekter på hvert niveau.

Gratis at komme i gang

Lær Lua med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
40
Lektioner
159

Ofte stillede spørgsmål

Er lektionen “Håndtér indlejrede data” gratis?

Ja — alle 3 lektioner i læringssporet Lua Academy, inklusive “Håndtér indlejrede data”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lua Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Håndtér indlejrede data”?

Arbejd med komplekse strukturer. Du øver dig i Lua Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Lua Academy?

Der kræves ingen tidligere erfaring. Lua Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Håndtér indlejrede data”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Lua Academy-lektion?

Ja. Alle Lua Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Hvorfor JSON
  2. Dekod JSON til tabeller
  3. Kod tabeller til JSON
  4. Håndtér indlejrede data
← Tilbage til Lua Academy