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

3

我有一个以字符串形式呈现的表格数据,以下是示例:

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

我应该如何把它转换成一个合适的表类型变量,以便可以访问键。我是Lua的新手,不知道是否有任何现有的方法可以实现。


请查看http://stackoverflow.com/questions/22632596/array-initialisation-with-json-data-lua。 - lhf
2个回答

3

大量的JSON解析器可用于Lua,例如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

这是否也适用于移动平台?因为我正在使用Lua作为语言,为J2ME设备开发Kony框架。当我尝试放置此文件时,它甚至不让我启动我的应用程序。我还尝试了不同的JSON解析器,但它无法识别关键字“require”。 - Vikram Singh
@Vikram 我不确定那个,require 是一个内置函数 http://www.lua.org/pil/8.1.html 所以一般情况下应该是存在的。 - Petr Abdulin

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)()

我需要在这个操作中加入那些方括号吗?如果有什么不清楚的,请问我。 - Vikram Singh
@Vikram 是的。方括号会告诉Lua里面的项是一个键。 - hjpotter92
@Vikram,针对您提供的示例数据,您不需要在键周围添加方括号。我只是想让代码更加健壮,以防键中包含空格。 - lhf
@Vikram,在第二段代码中,我假设J的定义与第一个一样。这就是你所说的吗?崩溃时显示了什么错误信息? - lhf
1
J 的最后一个组件没有以 , 结尾,因此它不会在第二个解决方案中被处理。 - Egor Skriptunoff
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接