2016-09-27 7 views
-2

私はKEYにLuaのテーブルを変換する必要がある= VAL変換のLUAテーブル/ KEYにJSON = VAL

例えば:?

local t1 = { 
     t0 = "valt0", 
     t1 = "valt1", 
     tN = { 
      t0key = "t0var", 
      t1key = "t1var", 
     } 
    } 

t0="valt0", t1="valt1", tN_t0key="t0var", tN_t1key="t1var" 

誰かが提案を持っていなければ

+0

なぜ単にjsonダンプを使用しないのですか? – hjpotter92

+0

本当に正確にその出力が必要ですか?いくつかのLua/JSONシリアライザを入手したり作成したりしてください。 – FareakyGnome

+0

私が言ったように、「私は必要です...」では、jSONログをLEEF形式に変換します。 –

答えて

0

テーブルをループして値がテーブルかどうかをチェックする関数を作成します。この場合、そのテーブルを同じ関数に戻します。テーブルでないものは、あなたの新しい平らなテーブルに書き出してください。どのように起こる可能性が高いかに応じて、既に反復されたテーブルを追跡することによって循環参照がないことを確認することができます。

0
local t1 = { 
    t0 = "valt0", 
    t1 = "valt1", 
    t2 = 42, 
    tN = {t0key = "t0var", 
     t1key = "t1var"} 
} 

local function convert(t) 
    local arr = {} 
    local cyclic = {} 

    local function convert_subtable(t, prefix) 
     assert(not cyclic[t], 'Cannot convert: cyclic reference detected') 
     cyclic[t] = true 
     for k, v in pairs(t) do 
     k = prefix..tostring(k) 
     if type(v) == 'number' or type(v) == 'boolean' then 
      table.insert(arr, k..'='..tostring(v)) 
     elseif type(v) == 'table' then 
      convert_subtable(v, prefix..k..'_') 
     else 
      table.insert(arr, k..'='..string.format('%q', tostring(v))) 
     end 
     end 
     cyclic[t] = nil 
    end 

    convert_subtable(t, '') 
    table.sort(arr) 
    return table.concat(arr, ', ') 
end 

print(convert(t1)) --> t0="valt0", t1="valt1", t2=42, tN_t0key="t0var", tN_t1key="t1var" 
関連する問題