lua中将表转成json格式的字符串

经常要用 Lua 处理 JSON 格式的字符串,于是写了一个可以从 Lua 中的 table 生成 JSON 格式字符串的方法,虽有重造轮子之嫌,但自己写的这一小段代码在工作中更实用一些(其实主要原因还是我读不懂别人写的代码 ):  

Lua代码   收藏代码
  1. function table2json(t)  
  2.         local function serialize(tbl)  
  3.                 local tmp = {}  
  4.                 for k, v in pairs(tbl) do  
  5.                         local k_type = type(k)  
  6.                         local v_type = type(v)  
  7.                         local key = (k_type == "string" and "\"" .. k .. "\":")  
  8.                             or (k_type == "number" and "")  
  9.                         local value = (v_type == "table" and serialize(v))  
  10.                             or (v_type == "boolean" and tostring(v))  
  11.                             or (v_type == "string" and "\"" .. v .. "\"")  
  12.                             or (v_type == "number" and v)  
  13.                         tmp[#tmp + 1] = key and value and tostring(key) .. tostring(value) or nil  
  14.                 end  
  15.                 if table.maxn(tbl) == 0 then  
  16.                         return "{" .. table.concat(tmp, ",") .. "}"  
  17.                 else  
  18.                         return "[" .. table.concat(tmp, ",") .. "]"  
  19.                 end  
  20.         end  
  21.         assert(type(t) == "table")  
  22.         return serialize(t)  
  23. end  


当 Lua table 的 key 和 value 之中有不符合 JSON 语法的数据类型出现时,第 13 行代码可以忽略这些不合法的 key-value 对,最终生成的 JSON 字符串中它们不会出现。  

调用:  
Lua代码   收藏代码
  1. table1 = {  
  2.         test1 = {  
  3.                 "test1""test2""test3", true, false,   
  4.         },  
  5.         test2 = "bbb",  
  6.         test3 = {  
  7.                 table2 = {  
  8.                         a = "a",  
  9.                         ttt= {  
  10.                                 123, {456, },   
  11.                         },  
  12.                         b = "b",  
  13.                         c = {},  
  14.                 },  
  15.                 [true] = 999,  
  16.         },  
  17.         [{}] = 34545,  
  18. }  
  19.   
  20. 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 的序列化
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值