Lua Academy · Lektion

Avkoda JSON till tabeller

Parsa JSON-strängar.

Lektion 2 av 413 steg

Avkoda JSON till tabeller är en gratis lektion i Lua Academy på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lua Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lua Academy innehåller totalt 4 lektioner.

Grunderna i avkodning

Avkodning omvandlar en JSON-sträng till ett Lua-värde som du kan arbeta med. Startpunkten är json.decode(text).

Om JSON-dokumentets toppnivå är ett objekt får du en Lua-tabell med strängnycklar. Om det är en array får du en tabell med numeriska index.

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

Läsa objektfält

Ett avkodat JSON-objekt fungerar som vilken Lua-tabell som helst. Du kommer åt värden med punkt- eller hakparentessyntax.

Nycklar som inte är giltiga Lua-identifierare, till exempel nycklar med blanksteg, måste anges med hakparentessyntax.

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

Avkoda arrayer

En JSON-array avkodas till en Lua-tabell som representerar en sekvens och är indexerad från 1. Du itererar över den med ipairs eller en numerisk loop.

Kom ihåg: Lua-arrayer börjar på index 1, inte 0.

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

Tal och booleska värden

JSON-tal avkodas till Lua-tal, och JSON-true/false avkodas till booleska Lua-värden.

Efter avkodningen kan du använda dem direkt i beräkningar eller villkor.

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

Hantera null

JSON-null är problematiskt eftersom Lua-nil tar bort en nyckel från en tabell. Bibliotek hanterar detta på olika sätt.

dkjson avkodar null till sentinelvärdet json.null, så att nyckeln fortfarande finns kvar. Jämför med det för att upptäcka null-värden.

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

Avkoda från en fil

Ofta finns JSON i en fil. Läs in hela filen som en sträng och avkoda den sedan.

Detta mönster är vanligt när du läser in konfiguration eller ett sparat speltillstånd.

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ärdena

decode i dkjson returnerar upp till tre värden: det avkodade resultatet, positionen där tolkningen slutade och ett felmeddelande.

Vid lyckad avkodning är resultatet inte nil. Vid fel är det nil, och det tredje värdet förklarar varför.

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

Validera indata

Lita aldrig på extern JSON. Kontrollera alltid resultatet innan du använder det, så att en felaktigt formaterad nyttolast inte får programmet att krascha.

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

Skillnader i cjson

lua-cjson fungerar på liknande sätt men kastar ett fel vid ogiltig indata i stället för att returnera felet. Omslut det med pcall för säkerhets skull.

cjson är snabbare, vilket spelar roll vid tolkning av stora datamängder.

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

Saknade nycklar blir nil

Om du läser en nyckel som inte fanns i JSON returnerar Lua helt enkelt nil. Det är normalt och genererar inget fel.

Använd en reservlösning med or för att ange standardvärden för valfria fält.

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

Tomma tabeller är tvetydiga

Både ett tomt JSON-objekt {} och en tom array [] avkodas till en tom Lua-tabell. Efter avkodningen kan du inte se vilket det var.

Detta spelar främst roll när du kodar tillbaka värdet. Tänk på tvetydigheten vid tur- och returkonverteringar.

Snabb kontroll

Kontrollera vad du har lärt dig om att avkoda JSON.

Sammanfattning

Avkodning omvandlar JSON-text till Lua-tabeller, där objekt blir tabeller med strängnycklar och arrayer blir sekvenser med index från 1.

Validera alltid resultatet, hantera null med bibliotekets sentinelvärde och kom ihåg att saknade nycklar helt enkelt är nil. Nästa steg är att koda tillbaka Lua-tabeller till JSON.

Gratis att börja

Lär dig Lua med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
40
Lektioner
159

Vanliga frågor

Är lektionen ”Avkoda JSON till tabeller” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lua Academy, inklusive ”Avkoda JSON till tabeller”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lua Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Avkoda JSON till tabeller”?

Parsa JSON-strängar. Ni övar på Lua Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Lua Academy?

Du behöver inga förkunskaper. Utbildningen i Lua Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Avkoda JSON till tabeller”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Lua Academy-lektionen?

Ja. Varje Lua Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Varför JSON
  2. Avkoda JSON till tabeller
  3. Koda tabeller till JSON
  4. Hantera kapslade data
← Tillbaka till Lua Academy