在Lua中将字符串转换为映射。

我对lua相当陌生。我试图将一个字符串的形式

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

转换成lua map。这样我就可以像访问json一样访问它。例如,e.g. someMap[data][shouldLoad] => true

我没有任何json引绑在lua中。我也试过使用loadstring将形式为{"result" = "success", "data"={"shouldLoad"="true"}"}的字符串转换,但没有成功。

下面是代码片段,我在其中调用getLocation钩子,该钩子返回json字符串化的map。现在我想从此响应体中访问一些键并相应地做出一些决策。

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错误日志报告错误,说正在尝试索引空值。

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

点赞
用户3561
用户3561

最好的答案是考虑使用一个已存在的 JSON 模块,正如 Alexey Ten 所建议的。这是来自 Alexey 的 JSON 模块列表

我也写了一个简短的纯 Lua JSON 模块,你可以自由地使用它。它是公共领域的,因此你可以使用、修改、销售它,并且不需要为它提供任何信用。使用这个模块,你可以像下面这样编写代码:

local json = require 'json'  -- 在你的脚本顶部引入。

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

-- 现在你可以像平常一样访问你的表格:
if myTable.result == 'success' then
  print('shouldLoad =', myTable.data.shouldLoad)
end
2015-04-29 04:12:08