我对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值。
如何使用任一字符串格式访问键值。请帮忙。
答案 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