经常要用 Lua 处理 JSON 格式的字符串,于是写了一个可以从 Lua 中的 table 生成 JSON 格式字符串的方法,虽有重造轮子之嫌,但自己写的这一小段代码在工作中更实用一些(其实主要原因还是我读不懂别人写的代码 ):
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 字符串中它们不会出现。
调用:
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 的序列化
分享到:
相关推荐
lua json文件转换 数据编排 lua配置表转成 json配置表
在LUA环境中,为了实现与JSON数据的互操作,开发者通常需要借助特定的LUA库来解析和生成JSON字符串。"LUA的JSON库"就是这样一个工具,它使得LUA程序能够方便地处理JSON格式的数据,从而与JavaScript环境或其他支持...
在实际应用中,你可能需要将JSON数据作为输入,运行`jsonToLua.py`,然后将生成的Lua代码复制到你的项目中,或者将转换结果写入新的Lua文件,供程序直接加载。在处理大型复杂JSON数据时,确保Python脚本正确处理嵌套...
当我们谈到"LUA的JSON框架"时,通常是指在LUA中解析、生成和操作JSON数据的库或工具。 Lua的JSON框架主要提供以下功能: 1. **JSON解析**:将JSON字符串转换为LUA的数据结构,例如表(table)。这使得LUA程序能够...
Json11ForLua可能提供了API接口,使得Lua脚本可以直接调用C++编写的函数来解析和生成JSON字符串。这样的API通常包括解析JSON字符串到Lua表,以及将Lua表转换成JSON字符串的功能。 标签“Lua操作Json的C扩展模块”...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,但不是JavaScript的语法,而是独立的语言无关的文本格式。在IT领域,...
lua-cjson利用了C语言的高性能特性,对于大型JSON数据,其解析和生成速度比纯Lua实现快得多。 lua-cjson作为Lua的JSON插件,因其高效和易用性,被广泛应用在需要处理JSON数据的Lua项目中,例如Web服务器、游戏开发...
Json文件一键生成Lua代码文件工具,需安装python27
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它在Web服务和客户端交互中扮演着重要角色,因为其结构清晰,支持复杂的数据结构,比如对象和数组。...
4. **生成Lua代码**:转换完成后,json2lua会输出一个Lua源代码文件,这个文件中的数据结构与原始JSON文件完全等价,可以直接在Lua环境中载入和使用。 5. **在Lua中使用转换后的代码**:将生成的Lua代码保存为文件...
在IT行业中,JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。在Lua环境中,处理JSON数据时,我们通常需要依赖第三方库,因为原生的Lua并不...
使用`lua-rapidjson`时,主要的API包括`decode`和`encode`函数,分别用于解析JSON字符串和生成JSON字符串。此外,还可能包含其他辅助函数,比如错误处理、JSON路径查询等。 举个例子,如果你有一个JSON字符串`json_...
在Lua中,通常需要一个库来解析和生成JSON字符串,这就是lua-cjson的作用。 **lua-cjson库详解:** lua-cjson库是Lua社区中广泛使用的JSON库,它提供了快速的JSON编码和解码功能。其核心特性包括: 1. **编码...
在Lua中,有如ljson、luajson等库可以用来解析和生成JSON。当从网络获取到JSON数据后,这些库可以帮助我们将JSON字符串转换为Lua表格,便于进一步处理和分析。 具体到项目中的"LuaGame",这可能是一个使用Lua进行...
JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,采用了键值对的结构,支持基本的数据类型如字符串、数字、数组、对象等。JSON因其简洁和高效的特性,...
总之,lua-rapidjson-master是Lua生态系统中的一个重要组件,它填补了Lua在处理JSON数据上的空白,让开发者能够充分利用RapidJSON的强大功能,同时享受Lua带来的简洁和高效。对于需要在Lua环境中处理JSON数据的项目...
在Lua中,由于其内置不支持JSON解析和生成,因此需要使用额外的库来实现这一功能。"json-lua"就是这样一个库,它为Lua提供了JSON编码和解码的能力。 该库的核心功能包括: 1. **JSON编码(Encoder)**:将Lua数据...
在Unity游戏开发中,数据管理是一项关键任务,而有效地存储和读取数据通常涉及使用JSON、Excel和Lua等格式。这个“Unity Json Lua转表工具”是为了帮助开发者更方便地在这些格式之间进行转换,从而优化游戏的数据...
接着,你可以使用`json.decode()`来解析JSON字符串,以及`json.encode()`来生成JSON字符串。 在给定的文件中,包含了一个名为"cjson.dll"的文件。这是一个动态链接库,用于Windows环境下的Lua,它提供了cjson库的...
首先,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Unity中,我们通常使用Lua来处理和解析JSON数据,这是因为Lua的灵活性和易读性使得它在处理...