如何在不使用load()或loadstring()的情况下将表格式的字符串转换为表格?

时间:2014-05-10 23:42:54

标签: string lua lua-table

另一个问题(String to Table in Lua)已经询问如何将格式化为表格的字符串转换为字符串,并且给出的答案是使用loadstringload来转换将字符串转换为随后执行的块。

我还有一个程序,使用http.request下载一个像lua表一样的文件,就像其他问题一样:

yourTable = http.request("http://www.somesite.com/table.txt")
print(yourTable)

--yourTable is a string that is formatted like a lua table, but not a table:
a={
    b = {
      c = 1,
      d = {
        e = {
        },
      },
    },
}

functionThatExpectsATable(yourTable) --throws error because yourTable is a string

虽然我可以使用loadloadstring来获取我想要的表,但这是一个潜在的安全漏洞,因为我的程序设计允许用户输入任何URL来加载其表数据从。如果他们指向lua代码而不是lua格式的表,那么将执行该代码。

如何转换"表格式字符串"进入表而不执行它?

1 个答案:

答案 0 :(得分:4)

以下是Penlight库的示例实现:

https://github.com/stevedonovan/Penlight/blob/master/lua/pl/pretty.lua

请参阅pretty.read功能