将字符串转换为lua

时间:2015-04-28 11:13:20

标签: nginx lua

我对lua很新。我试图转换形式的字符串

{"result": "success", "data":{"shouldLoad":"true"}"}

进入lua地图。所以我可以像json一样访问它。 e.g. someMap[data][shouldLoad] => true

我在lua中没有任何json绑定。我还尝试使用loadstring来转换{"result" = "success", "data"={"shouldLoad"="true"}"}形式的字符串,这是无效的。

以下是代码片段,我在其中调用getLocation hook,后者又返回json字符串化地图。现在我想从这个响应主体访问一些键并做出相应的决定。

access_by_lua "
    local res = ngx.location.capture('/getLocation')

    //res.body = {"result"= "success", "data" = {"shouldLoad" = "true"}}
    local resData = loadstring('return '..res.body)()

    local shoulLoad = resData['data']['shouldLoad']
" 

当我尝试加载shouldLoad值时,nginx错误日志会报告错误,指示尝试索引nil值。

如何使用任一字符串格式访问键值。请帮忙。

1 个答案:

答案 0 :(得分:0)

最佳答案是考虑预先存在的JSON模块,如Alexey Ten所建议的那样。这是来自Alexey的list of JSON modules

我还写了a short pure-Lua json module,你可以自由使用。它是公共领域,因此您可以使用它,修改它,出售它,并且不需要为它提供任何信用。要使用该模块,您可以编写如下代码:

local json = require 'json'  -- At the top of your script.

local jsonStr = '{"result": "success", "data":{"shouldLoad":"true"}"}'
local myTable = json.parse(jsonStr)

-- Now you can access your table in the usual ways:
if myTable.result == 'success' then
  print('shouldLoad =', myTable.data.shouldLoad)
end