0Pricing
Lua Academy · Lezione

Decodificare JSON in tabelle

Analizzi stringhe JSON.

Decodificare JSON in tabelle è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.

Nozioni di base sulla decodifica

La decodifica trasforma una stringa JSON in un valore Lua con cui è possibile lavorare. Il punto di ingresso è json.decode(text).

Se il JSON al livello principale è un oggetto, si ottiene una tabella Lua con chiavi stringa; se è un array, si ottiene una tabella con indici numerici.

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

Leggere i campi di un oggetto

Un oggetto JSON decodificato si comporta come qualsiasi tabella Lua. Acceda ai valori con la notazione a punti o tra parentesi quadre.

Le chiavi che non sono identificatori Lua validi, ad esempio quelle contenenti spazi, richiedono la sintassi tra parentesi quadre.

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

Decodificare gli array

Un array JSON viene decodificato in una tabella sequenziale Lua indicizzata a partire da 1. Lo si può scorrere con ipairs o con un ciclo numerico.

Ricordi: gli array Lua iniziano dall'indice 1, non da 0.

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

Numeri e valori booleani

I numeri JSON vengono decodificati in numeri Lua, mentre true/false in JSON diventano valori booleani Lua.

Dopo la decodifica può utilizzarli direttamente nelle operazioni aritmetiche o nelle condizioni.

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

Gestire null

Il valore null di JSON è problematico perché nil in Lua rimuove una chiave da una tabella. Le librerie lo gestiscono in modi diversi.

dkjson decodifica null nel valore sentinella json.null, così la chiave continua a esistere. Lo confronti con questo valore per rilevare i null.

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

Decodificare da un file

Spesso il JSON si trova in un file. Legga l'intero file in una stringa, quindi la decodifichi.

Questo schema è comune per caricare la configurazione o lo stato salvato di una partita.

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)

I tre valori restituiti

Il metodo decode di dkjson restituisce fino a tre valori: il risultato decodificato, la posizione in cui l'analisi si è interrotta e un messaggio di errore.

In caso di successo il risultato è diverso da nil; in caso di errore è nil e il terzo valore ne spiega il motivo.

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

Convalidare l'input

Non si fidi mai del JSON esterno. Controlli sempre il risultato prima di utilizzarlo, così un payload malformato non farà arrestare il programma.

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

Differenze di cjson

lua-cjson funziona in modo simile, ma genera un errore per l'input non valido invece di restituirlo. Lo racchiuda in pcall per maggiore sicurezza.

cjson è più veloce, una caratteristica importante quando si analizzano grandi quantità di dati.

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

Le chiavi mancanti sono nil

Se legge una chiave che non era presente nel JSON, Lua restituisce semplicemente nil. È un comportamento normale e non genera un errore.

Utilizzi un valore alternativo con or per fornire valori predefiniti per i campi facoltativi.

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

Le tabelle vuote sono ambigue

Sia un oggetto JSON vuoto {} sia un array vuoto [] vengono decodificati in una tabella Lua vuota. Dopo la decodifica non è possibile sapere quale dei due fosse.

Questo è importante soprattutto quando si esegue nuovamente la codifica; tenga presente l'ambiguità nei cicli di andata e ritorno.

Verifica rapida

Verifichi ciò che ha imparato sulla decodifica del JSON.

Riepilogo

La decodifica converte il testo JSON in tabelle Lua: gli oggetti diventano tabelle con chiavi stringa e gli array diventano sequenze indicizzate a partire da 1.

Convalidi sempre il risultato, gestisca null tramite il valore sentinella della libreria e ricordi che le chiavi mancanti sono semplicemente nil. Nella prossima sezione codificherà nuovamente le tabelle Lua in JSON.

Domande Frequenti

La lezione «Decodificare JSON in tabelle» è gratuita?

Sì — il testo completo di «Decodificare JSON in tabelle» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.

Cosa imparerò in «Decodificare JSON in tabelle»?

Analizzi stringhe JSON. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Lua Academy?

Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Decodificare JSON in tabelle»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Lua Academy?

Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Perché JSON
  2. Decodificare JSON in tabelle
  3. Codificare tabelle in JSON
  4. Gestire dati annidati
← Torna a Lua Academy