从文件中加载JSON配置的LUA

我正在尝试将以前加载一些JSON内容到全局变量中的旧LUA方法移动到“类”中。但是我一直得到以下错误:

尝试调用字段'decode'(一个空值)
尝试索引全局'cjson'(一个空值)

我不太了解lua,但我尝试了几乎所有组合,没有结果,你能解释一下为什么会出现这些错误吗?

模块的当前实现如下:

Config = {}
Config.__index = Config

function Config.create(config_filename)
   local cjson = require("cjson")
   local config = {}
   setmetatable(config,Config)

   local f = io.open(config_filename, "r")
   local content = f:read("*a")
   f:close()
   config = cjson.decode(content)

   return config
end

return Config

最终结果是我想要从其他文件执行类似于以下代码的操作:

local config_class = require("config")
local config = config_class.create("/path/to/file.json")

ngx.say(config:some_configuration_data())
点赞
用户2858170
用户2858170

将下面翻译成中文并且保留原本的 markdown 格式,

错误提示告诉你cjson和decode是空值,不能被引用或调用。

require会加载某些文件并运行其中的代码并通过其返回值传递。如果你运行一个Lua脚本,它的行为类似于默认返回nil的函数。因此,除非你指定脚本返回值,否则require将返回nil

我不知道你需要的cjson文件内部有什么,但它显然没有返回期望的JSON实现,而是nil

因此,在cjson中的代码应该返回一个存储在"decode"键下的Lua表格函数。

2016-06-23 15:59:55