2014-03-31 44 views
3

我有一個字符串表格中的表格數據。下面的示例給出:如何將字符串轉換爲Lua中的表格

{"engName1":"HOLDER","validDurPeriod":3,"engName2":"INFORMATION","appStatus":2,"stayExpDate":"01/10/2012","engName3":"","appExpDate":"12/04/2010"} 

我怎樣才能將其轉換爲正確的表類型變量,這樣我可以訪問keys.I是新來的lua,我不知道是否有任何現有的方法來做到這一點。

+0

請參閱http://stackoverflow.com/questions/22632596/array-initialisation-with-json-data-lua。 – lhf

回答

3

有一個可用的Lua JSON解析器的plenty,例如dkjson

local json = require ("dkjson") 

local str = [[ 
{ 
    "numbers": [ 2, 3, -20.23e+2, -4 ], 
    "currency": "\u20AC" 
} 
]] 

local obj, pos, err = json.decode (str, 1, nil) 
if err then 
    print ("Error:", err) 
else 
    print ("currency", obj.currency) 
    for i = 1,#obj.numbers do 
    print (i, obj.numbers[i]) 
    end 
end 

輸出:

currency € 
1 2 
2 3 
3 -2023 
4 -4 
+0

也適用於移動平臺。因爲我正在爲使用lua作爲語言的J2ME設備開發Kony框架。當我試圖放置這個文件時,它甚至不讓我啓動我的應用程序。我試着用不同的json解析器,然後它無法識別關鍵字「要求」... – Vikram

+0

@Vikram我不確定,'require'是一個內置函數http://www.lua.org/pil/8.1.html所以一般應該在那裏.. –

1

試試這個代碼開始與

J=[[ 
{"engName1":"HOLDER","validDurPeriod":3,"engName2":"INFORMATION","appStatus":2,"stayExpDate":"01/10/2012","engName3":"","appExpDate":"12/04/2010"} 
]] 
J=J:gsub("}",",}") 
L={} 
for k,v in J:gmatch('"(.-)":(.-),') do 
    L[k]=v 
    print(k,v) 
end 

你仍然需要將某些值轉換爲數字並刪除引號。

或者,如果您信任源字符串,您可以讓Lua盡力而爲。只需更換循環:

J=J:gsub('(".-"):(.-),','[%1]=%2,\n') 
L=loadstring("return "..J)() 
+0

我是否必須將這些方括號添加到此操作的字符串中?請問我有沒有不清楚的地方.. – Vikram

+0

@Vikram是的。方括號會告訴盧阿里面的物品是一把鑰匙。 – hjpotter92

+0

@Vikram,對於你給出的示例數據,你不需要在關鍵字周圍添加方括號。我只是想讓代碼更健壯一些,以防鑰匙中有空格。 – lhf

相關問題