JSON文件是最最常用的配置文档,这个例子展示了如何读取其中的内容,
实现的功能:
- 使用dkjson模块,如系统没有,使用luarocks安装
- 路径中~的扩展,得到完整路径
- 读取json文件中的字符串
- 用dkjson将字符串decode为table
- 取任意一个key的value值
- 遍历整个table
知识点:
io.popen([prog,[mode]]的学习和使用,类似于os.execute()
local json = require "dkjson"
-- table config
local config = {}
function config.explainuser(pathstr)
local tmp = "echo "..pathstr
local filepath = io.popen(tmp)
local real_path = filepath:read()
filepath:close()
return real_path
end
--[[
io.popen()
-- io.popen ()
-- 在额外的进程中启动程序prog,并返回用于prog的文件句柄
-- 1. prog为一条指令时,返回的是指令的执行结果,通过read()来读取内容
-- 2. prog为一个文件时,返回的是文件句柄,意为打开文件,通过read(*.a)读取文件内容
--]]
local path = config.explainuser("~/jsonfilefolder/jsonfilename.json")
--print("-->"..path)
-- read string in file path
local file_point = io.open(path, "r")
local str = nil
if file_point == nil then
print("can't open json file:"..path)
else
str = file_point:read("*a")
file_point:close()
end
--to json
local _json_info = {}
if str ~= nil then
_json_info = json.decode(str)
if _json_info == nil then
print("json format error from file:"..path)
end
else
print("Got nil from file:"..path)
end
-- get value of key
function config.getValue(key)
return _json_info[key]
end
-- traversal table
function config.traversal()
for key, value in pairs(_json_info) do
print("name:" .. key .. "-- value:" .. value)
end
end
--config.traversal()
return config