LUA 从文件加载 JSON 配置

LUA load JSON configuration from file

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

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())

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

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

我不知道你需要的 cjson 文件里面有什么,但它显然不是 return 想要的 json 实现,而是 nil.

所以 cjson 中的代码应该 return 一个 Lua table 和一个存储在键 "decode".

下的函​​数