0

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

attempt to call field 'decode' (a nil value)
attempt to index global 'cjson' (a nil value)

我不太了解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())
4

1 回答 1

1

正如错误消息告诉您的那样, cjson 和 decode 是 nil 值,无法索引或调用。

require将加载一些文件并运行包含的代码并传递返回值。如果你运行一个 Lua 脚本,它的行为就像一个nil默认返回的函数。因此,除非您指定脚本返回的require内容将返回nil

我不知道您需要的 cjson 文件中有什么,但它显然不会返回想要的 json 实现,而是nil.

因此,cjson 中的代码应该返回一个 Lua 表,其中包含一个存储在键“decode”下的函数。

于 2016-06-23T15:59:55.823 回答