0Pricing
Lua Academy · Lezione

Gestire dati annidati

Lavori con strutture complesse.

Gestire dati annidati è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 4 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.

I dati annidati sono ovunque

Il JSON del mondo reale è raramente piatto. Gli oggetti contengono oggetti e gli array contengono oggetti, spesso a diversi livelli di profondità.

In Lua questo significa avere tabelle dentro altre tabelle. La buona notizia è che decode ed encode gestiscono automaticamente l'annidamento.

Un oggetto dentro un oggetto

Quando un valore JSON è a sua volta un oggetto, viene decodificato in una tabella Lua annidata. Può scendere di livello usando l'accesso concatenato ai campi.

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

Un array di oggetti

Una struttura molto comune è un array JSON di oggetti, come un elenco di record. Viene decodificato in una sequenza di tabelle.

Utilizzi ipairs per iterare e leggere i campi di ogni elemento.

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

Accesso a dati profondamente annidati

Può concatenare gli accessi fino alla profondità della struttura dei dati. Ogni livello è semplicemente un'altra ricerca in una tabella.

Tuttavia, se manca un livello intermedio, la catena genera l'errore "attempt to index a nil value".

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

Accesso sicuro ai dati annidati

Per evitare arresti anomali quando mancano dei livelli, controlli ogni passaggio oppure utilizzi il short-circuiting di and.

La catena di and si interrompe al primo nil e restituisce nil invece di generare un errore.

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

Iterazione su array annidati

Gli array possono contenere oggetti che a loro volta contengono altri array. Annidi i cicli in modo da rispecchiare la struttura.

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

Creazione di tabelle annidate

Per codificare JSON annidato, annidi semplicemente le tabelle Lua. Il codificatore percorre ricorsivamente l'intera struttura.

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

Modifica di valori annidati

Può leggere, modificare e aggiungere campi a qualsiasi profondità prima di ricodificare i dati. Questo è il cuore della trasformazione dei dati.

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

Combinazione di array e oggetti

JSON combina liberamente array e oggetti a diversi livelli. Lua rispecchia questo comportamento con tabelle sequenziali e tabelle con chiavi annidate tra loro.

Si assicuri semplicemente che ogni tabella abbia in modo coerente una sola delle due forme.

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

Esplorazione di strutture sconosciute

Quando non conosce in anticipo la struttura, utilizzi type() per esaminare ogni valore e ricorra nelle tabelle.

Questo le consente di scrivere elaboratori generici per JSON arbitrario.

local function walk(v)
  if type(v) == "table" then
    for k, sub in pairs(v) do walk(sub) end
  else
    print(v)
  end
end

Attenzione a null nei dati annidati

Un valore null in profondità nei dati annidati viene comunque decodificato come json.null in dkjson. Ne tenga conto quando percorre le strutture, per non scambiarlo per una tabella o un valore reale.

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

Verifica rapida

Verifichi la sua capacità di gestire JSON annidato in Lua.

Riepilogo

Il JSON annidato corrisponde a tabelle dentro altre tabelle; decode ed encode gestiscono la ricorsione al posto suo.

Scenda di livello usando accessi concatenati, ma gestisca i livelli mancanti con catene di and. Crei l'output annidato annidando le tabelle Lua e ricordi i valori null e la distinzione tra array e oggetti a ogni livello.

Domande Frequenti

La lezione «Gestire dati annidati» è gratuita?

Sì — il testo completo di «Gestire dati annidati» è 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 «Gestire dati annidati»?

Lavori con strutture complesse. 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 4 di 4.

Quanto tempo richiede la lezione «Gestire dati annidati»?

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