Json和Lua table互转的Lua模块

先分词,再解析,少写了语法检查

module( "json_to_lua", package.seeall )

--##############################################################################
--#                                  模块接口
--##############################################################################

-- json字符串转lua table
function JsonStrToLuaTable( szJsonStr )
    local tWords = SplitWord( szJsonStr )
    -- 此处应该加一个语法检查的
    -- CheckSyntax( tWords )
    local ResultObj = CreateObjectByWords( tWords )

    return ResultObj
end

-- lua table转json
function LuaTableToJsonStr( tTable, nTabCnt )
    nTabCnt = nTabCnt or 0
    local szJsonStr = "\n"

    assert( type( tTable ) == "table", "tTable is not a table." )

    local szTab = ""
    for i = 1, nTabCnt do
        szTab = szTab .. '\t'
    end

    local szKeyType = nil
    for key, value in pairs( tTable ) do
        if szKeyType == nil then
            szKeyType = type( key )
            if szKeyType ~= "string" and szKeyType ~= "number" then
                -- 处理不了其他类型的key
                return nil
            end
        end

        -- 处理key,key类型不一致,转换失败
        if type( key ) ~= szKeyType then
            return nil
        end

        szJsonStr = szJsonStr .. '\t' .. szTab
        if szKeyType == "string" then
            szJsonStr = szJsonStr .. string.format( "\"%s\" = ", EscDecode( key ) )
        end

        -- 处理value
        if type( value ) == "table" then
            szJsonStr = szJsonStr .. LuaTableToJsonStr( value, nTabCnt + 1 ) .. ",\n"
        else
            if type( value ) == 'string' then
                value = '"' .. EscDecode( value ) .. '"'
            end
            szJsonStr = szJsonStr .. string.format( "%s,\n", value )
        end

    end
    if szJsonStr == '\n' then szTab = ''; szJsonStr = '' end
    if szKeyType == "string" then
        return "{" .. szJsonStr .. szTab .. '}'
    else
        return "[" .. szJsonStr .. szTab .. ']'
    end
end

-- 文件中读json文件并转成Lua table
function JsonFileToLuaTable( szJsonFileName )
    local JsonFileObj = io<
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值