Lua读取/解析json文件

JSON文件是最最常用的配置文档,这个例子展示了如何读取其中的内容,

实现的功能:

  1. 使用dkjson模块,如系统没有,使用luarocks安装
  2. 路径中~的扩展,得到完整路径
  3. 读取json文件中的字符串
  4. 用dkjson将字符串decode为table
  5. 取任意一个key的value值
  6. 遍历整个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

 

你可能感兴趣的:(Lua)