• lua2json


    Lua代码
    function table2json(t)  
            local function serialize(tbl)  
                    local tmp = {}  
                    for k, v in pairs(tbl) do  
                            local k_type = type(k)  
                            local v_type = type(v)  
                            local key = (k_type == "string" and "\"" .. k .. "\":")  
                                or (k_type == "number" and "")  
                            local value = (v_type == "table" and serialize(v))  
                                or (v_type == "boolean" and tostring(v))  
                                or (v_type == "string" and "\"" .. v .. "\"")  
                                or (v_type == "number" and v)  
                            tmp[#tmp + 1] = key and value and tostring(key) .. tostring(value) or nil  
                    end  
                    if table.maxn(tbl) == 0 then  
                            return "{" .. table.concat(tmp, ",") .. "}"  
                    else  
                            return "[" .. table.concat(tmp, ",") .. "]"  
                    end  
            end  
            assert(type(t) == "table")  
            return serialize(t)  
    end  
    
    
    当 Lua table 的 key 和 value 之中有不符合 JSON 语法的数据类型出现时,第 13 行代码可以忽略这些不合法的 key-value 对,最终生成的 JSON 字符串中它们不会出现。 
    
    调用: 
    Lua代码
    table1 = {  
            test1 = {  
                    "test1", "test2", "test3", true, false,   
            },  
            test2 = "bbb",  
            test3 = {  
                    table2 = {  
                            a = "a",  
                            ttt= {  
                                    1, 2, 3, {4, 5, 6, },   
                            },  
                            b = "b",  
                            c = {},  
                    },  
                    [true] = 999,  
            },  
            [{}] = 34545,  
    }  
      
    print(table2json(table1))  
    
    
    输出: 
    
    引用
    
    {"test3":{"table2":{"a":"a","c":{},"b":"b","ttt":[1,2,3,[4,5,6]]}},"test1":["test1","test2","test3",true,false],"test2":"bbb"} 
    
    
    
    可以看到 [true] = 999, [{}] = 34545 这两个不能转化为 JSON 的 key-value 在生成的 JSON 字符串中已经被过滤掉了。 
    
    惭愧的是,因为 Lua 的语法特性,这个方法暂时还不能将 Lua 中的 nil 转化为 JSON 中的 null,等想到好的办法再说,目前看来这样的需求也没有存在的必要,所以现在也够用了 
    以上代码稍作修改,也可以用来实现 Lua table 的序列化
    

      

  • 相关阅读:
    Vue Bug
    Vue.js(一)
    Node.js简介
    对请求链接的URLEncode处理
    淘宝开放平台
    Java基础(一)
    计算机基础知识
    Unity中对象池的使用
    希尔排序算法
    插入排序算法
  • 原文地址:https://www.cnblogs.com/byfei/p/2920987.html
Copyright © 2020-2023  润新知