Lua Academy · Lektion

Dekod JSON til tabeller

Pars JSON-strenge.

Lektion 2 af 413 trin

Dekod JSON til tabeller er en gratis Lua Academy-lektion på CoddyKit. Dette er lektion 2 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.

Grundlæggende afkodning

Afkodning omdanner en JSON-streng til en Lua-værdi, som du kan arbejde med. Indgangspunktet er json.decode(text).

Hvis JSON-dataene på øverste niveau er et objekt, får du en Lua-tabel med strengnøgler. Hvis de er en tabel, får du en tabel med numeriske indeks.

local json = require("dkjson")
local data = json.decode('{"id": 7}')
print(data.id)

Læsning af objektfelter

Et afkodet JSON-objekt fungerer som enhver anden Lua-tabel. Du får adgang til værdier med punktum- eller klammeparentesnotation.

Nøgler, der ikke er gyldige Lua-identifikatorer, f.eks. nøgler med mellemrum, kræver klammeparentesnotation.

local json = require("dkjson")
local u = json.decode('{"name": "Mia", "full name": "Mia Lee"}')
print(u.name)
print(u["full name"])

Afkodning af tabeller

En JSON-tabel afkodes til en Lua-sekvenstabel med indeks fra 1. Du gennemløber den med ipairs eller en numerisk løkke.

Husk, at Lua-tabeller starter ved indeks 1, ikke 0.

local json = require("dkjson")
local nums = json.decode('[10, 20, 30]')
for i, v in ipairs(nums) do
  print(i, v)
end

Tal og boolske værdier

JSON-tal afkodes til Lua-tal, og JSON true/false afkodes til Lua-boolske værdier.

Efter afkodningen kan du bruge dem direkte i aritmetik eller betingelser.

local json = require("dkjson")
local d = json.decode('{"qty": 3, "paid": false}')
if not d.paid then
  print("unpaid, qty =", d.qty)
end

Håndtering af null

JSON null er vanskelig at håndtere, fordi Lua nil fjerner en nøgle fra en tabel. Biblioteker håndterer dette forskelligt.

dkjson afkoder null til en markørværdi, json.null, så nøglen stadig findes. Sammenlign med den for at registrere null-værdier.

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

Afkodning fra en fil

Ofte ligger JSON-dataene i en fil. Læs hele filen ind i en streng, og afkod den derefter.

Denne fremgangsmåde er almindelig, når du indlæser konfiguration eller en gemt spiltilstand.

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)

De tre returværdier

dkjsons decode returnerer op til tre værdier: det afkodede resultat, positionen hvor fortolkningen stoppede, og en fejlmeddelelse.

Ved succes er resultatet forskelligt fra nil. Ved fejl er det nil, og den tredje værdi forklarer hvorfor.

local json = require("dkjson")
local obj, pos, err = json.decode('{"a":1}')
print(obj.a, pos, err)

Validering af inddata

Stol aldrig blindt på ekstern JSON. Kontrollér altid resultatet, før du bruger det, så fejlagtige data ikke får dit program til at gå ned.

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

Forskelle ved cjson

lua-cjson fungerer på samme måde, men udløser en fejl ved ugyldige inddata i stedet for at returnere fejlen. Pak det ind i pcall for at gøre det sikkert.

cjson er hurtigere, hvilket er vigtigt ved fortolkning af store datamængder.

local cjson = require("cjson")
local ok, data = pcall(cjson.decode, '{"x":1}')
if ok then print(data.x) else print("error") end

Manglende nøgler er nil

Hvis du læser en nøgle, der ikke fandtes i JSON-dataene, returnerer Lua ganske enkelt nil. Det er normalt og udløser ikke en fejl.

Brug en reserveværdi med or til at angive standardværdier for valgfrie felter.

local json = require("dkjson")
local d = json.decode('{"name": "Sam"}')
local age = d.age or 0
print(d.name, age)

Tomme tabeller er tvetydige

Både et tomt JSON-objekt {} og en tom JSON-tabel [] afkodes til en tom Lua-tabel. Efter afkodningen kan du ikke se, hvilken af de to det var.

Det har primært betydning, når du koder dataene igen. Husk tvetydigheden ved tur-retur-forløb.

Hurtigt tjek

Kontrollér, hvad du har lært om afkodning af JSON.

Opsummering

Afkodning konverterer JSON-tekst til Lua-tabeller, hvor objekter bliver til tabeller med strengnøgler, og tabeller bliver til sekvenser med indeks fra 1.

Validér altid resultatet, håndtér null via bibliotekets markørværdi, og husk, at manglende nøgler ganske enkelt er nil. I næste afsnit koder du Lua-tabeller tilbage til JSON.

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 “Dekod JSON til tabeller” gratis?

Ja — alle 3 lektioner i læringssporet Lua Academy, inklusive “Dekod JSON til tabeller”, 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 “Dekod JSON til tabeller”?

Pars JSON-strenge. 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 2 af 4.

Hvor lang tid tager lektionen “Dekod JSON til tabeller”?

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