Convertitore da Lua a JSON
Incolla una tabella Lua. Ti restituiamo JSON.
Cosa fa questo strumento
Se ti è capitato di avere una tabella Lua uscita da un config di un gioco, da uno script Redis o da un handler OpenResty su nginx e ti serviva come JSON, qui si fa tutto con un incolla. Niente json.lua o dkjson da installare solo per serializzare una costante.
Le tabelle Lua sono un po' scivolose perché mescolano parte array (chiavi intere a partire da 1) e parte hash (chiavi stringa o miste) nella stessa struttura. Il convertitore capisce che forma hai: una tabella tutta parte array diventa un array JSON, una tutta parte hash diventa un oggetto JSON, e una tabella mista ripiega su un oggetto JSON con le chiavi numeriche stringificate. È quello che descrive il manuale di riferimento di Lua 5.4 e quello che fanno le librerie JSON più usate.
Le tabelle annidate scendono quanto vuoi. nil diventa null, true/false passano dritti, i numeri restano numeri (gli interi restano interi). Le stringhe con virgolette singole, doppie o con le parentesi lunghe ([[...]]) vengono parsate tutte correttamente. I commenti (-- e --[[ ... ]]) vengono tolti.
Come si usa
Tre passi. Va bene sia per tabelle piccole sia per config chilometrici.
Incolla il tuo Lua (o prova l'esempio)
Butta la tua tabella Lua nell'editor di sinistra. Una tabella parte array, una tabella parte hash, tabelle annidate o più dichiarazioni top-level local x = {...} — tutto bene.
Lascia la sintassi Lua com'è. Chiavi senza virgolette (name = "..."), chiavi con parentesi (["foo-bar"] = ...) e commenti si parsano senza problemi.
Premi Converti
Clicca il bottone verde Converti. Lo strumento cammina sulla tabella, a ogni livello decide se è array o hash e butta fuori il JSON corrispondente.
Copia il JSON
Copia il JSON indentato dal pannello di destra in un file di config, in una chiamata API o in una fixture di test. Fatto.
Quando serve davvero
Migrare config di giochi/engine
Parecchi engine (Love2D, Defold, addon di World of Warcraft) usano tabelle Lua per il config. Quando la pipeline passa a un tooling basato su JSON, questa è la conversione in un colpo solo.
Debug di handler OpenResty / Nginx
Hai costruito un body di risposta come tabella Lua in uno script OpenResty — incollalo qui per vedere il JSON che arriverà al client, prima di rideployare.
Script Lua su Redis
Uno script EVAL di Redis ritorna una struttura complessa; il literal della tabella Lua si pesca facile dai log. Convertilo in JSON per confrontarlo con quello che vede l'app.
Portare config in un altro linguaggio
Stai passando da uno strumento scritto in Lua a un rewrite in Node o Go. Converti le vecchie tabelle di config in JSON come formato di migrazione.
Domande frequenti
Come decide tra array e oggetto?
Stessa regola di json.lua: se la tabella ha solo chiavi intere consecutive a partire da 1, è un array. Altrimenti è un oggetto. Le tabelle miste (1, 2, "name") vengono fuori come oggetti con le chiavi numeriche stringificate, perché gli array JSON non possono avere chiavi con nome.
E il nil dentro una tabella?
Un valore nil elimina quella chiave in Lua — il convertitore segue la stessa regola e omette semplicemente le chiavi con valore nil in uscita. Un nil a sé (per esempio local x = nil) diventa null in JSON.
Supporta le stringhe con parentesi lunghe tipo <code>[[...]]</code>?
Sì. Le stringhe con parentesi lunghe (comprese [==[...]==] con qualsiasi numero di segni di uguale) vengono parsate ed emesse come stringhe JSON con il giusto escape.
Posso incollare più tabelle?
Sì. Ogni local name = {...} o name = {...} top-level diventa una chiave nel JSON d'uscita. Le tabelle anonime in coda prendono chiavi numeriche. Niente viene scartato in silenzio.
Il mio codice viene salvato?
No — lo mandiamo al backend per la conversione e non lo salviamo. Comunque, togli qualsiasi cosa sensibile prima di incollare.
Gestisce i file rockspec di LuaRocks?
Sì. I file rockspec sono in sostanza tabelle Lua, quindi si convertono puliti — comodo per migrare i metadati delle dipendenze verso un registro in formato JSON.
Altri strumenti che ti possono servire
Lua a JSON si sposa bene col resto della cassetta degli attrezzi: