Lua 中动态获取 Json 键值

我有一个输入的 Json,需要获取特定键的值。键名将会是动态的,并会像下面一样传入输入 -

输入的 Json -

{
    "error": "Bad Request"
    "source": [
        {
            "code": "400",
            "message": "Missing values"
        }
    ]
}

在这里我需要动态获取 code 和 message 的值。如果我直接给出路径,下面的语句就可以读取出值 -

json_body["source"][1].code

但是这里的 json 路径将会被用户作为字符串传入,如下所示 -

local path = "source[1].code"

如何使用这个 path 变量的值将 Json 值取出?我试过下面的语句,但这并不起作用 -

json_body[path]

下面是我使用的样例 Lua 代码 -

local cjson = require("cjson.safe").new()

local function read_json_body(body)
    if body then
        return cjson.decode(body)
    end
end

local json_body = read_json_body(buffered_data)
local message_path = "source[1].code"
local value = json_body[message_path]

我可以获取数组之外的字段的值,如下所示 -

local message_path = "error"
local value = json_body[message_path]
点赞
用户5216067
用户5216067

如下所示,@EgorSkriptunoff建议的以下代码可行:

local value = assert(load("return "..path, nil, "t", json_body))()
2022-03-11 10:00:04