如何将字符串转换为Lua中的表

时间:2014-03-31 09:23:22

标签: lua lua-table

我有一个字符串形式的表数据。样品如下:

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

如何将其转换为正确的表类型变量,以便我可以访问密钥。我是lua的新手,我不知道是否有任何现有方法可以这样做。

2 个答案:

答案 0 :(得分:3)

Lua可以使用plenty个JSON解析器,例如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

答案 1 :(得分: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)()