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

2024-06-02 06:58

本文主要是介绍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 的序列化

这篇关于lua中将表转成json格式的字符串的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1023263

相关文章

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

java中判断json key是否存在的几种方法

《java中判断jsonkey是否存在的几种方法》在使用Java处理JSON数据时,如何判断某一个key是否存在?本文就来介绍三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目http://www.chinasem.cn录第一种方法是使用 jsONObject 的 has 方法

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc

Java 字符串操作之contains 和 substring 方法最佳实践与常见问题

《Java字符串操作之contains和substring方法最佳实践与常见问题》本文给大家详细介绍Java字符串操作之contains和substring方法最佳实践与常见问题,本文结合实例... 目录一、contains 方法详解1. 方法定义与语法2. 底层实现原理3. 使用示例4. 注意事项二、su

Vue3 如何通过json配置生成查询表单

《Vue3如何通过json配置生成查询表单》本文给大家介绍Vue3如何通过json配置生成查询表单,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录功能实现背景项目代码案例功能实现背景通过vue3实现后台管理项目一定含有表格功能,通常离不开表单

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化