经常要用 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配置表
Json文件一键生成Lua代码文件工具,需安装python27
使用GNU套件编译时用g++进行编译,加上 -std=c++11,先编译json11再编译Ljson,最后链接生成目标文件。
导表工具项目主页: : Excel文件: 转换后的python数据表: # -*- coding: utf-8 -*-# 此文件由导表工具自动生成,禁止手动修改。# from example.xlsx# A ID 编号# B name 名称# C describe 描述# D quality 品质# E...
在Unity开发中遇到一个问题,策划将模型的技能在编辑器下配置好,使用Json文件保存的,现在需要改动后同步生成Lua的配表。网上搜了一下好像没有C#实现的,于是抽时间自己写了一份。调用JsonToLua.Convert(string ...
从Protobuf到JSON-Schema编译器这将采用protobuf定义并将其转换为JSONSchemas,可用于动态验证JSON消息。 对于使用ProtoBuf定义数据但将JSON... protoc-gen-jsonschema设计为像其他任何proto生成器一样运行。 以下示例
xLua中集成第三方库json_ios.txt
JSON/Lua 表转 HTML 表特征与rowspan 将 JSON 数据(带有扩展标记声明)转换为 HTML 表格Lua 表转换的库 lua2html.lua 支持自动填充空单元格。 保持桌子总是漂亮支持隐藏数组索引列从 CLI 使用 css 快速生成表格。 ...
(请注意,moonshine vm 对其 json 格式相当挑剔,因此请确保不要在字符串末尾添加额外的换行符,例如使用打印或在任何正常的文本编辑器中编辑生成的文件) 用法: lua distill.lua input [target] 使用解析器的...
伟大的lua-json-serde结构生成器 专为制造 依存关系: pyYAML jinja2 就是这样,这里没有扩展列表... 用法: 创建一个Yaml文件。 将内容放入yaml文件。 以config.yaml为例。 执行lua-json-serde 看看为什么...
对源地图的基本支持,例如由生成的源地图 用法 Lua独立译员 要使用独立解释器调试Lua程序,请在用户或工作空间设置中设置lua-local.interpreter : 另外,您可以将解释器和文件设置为在launch.json运行: { " ...
将制定格式的 xlsx 文件,生成为 json 格式以及 Lua 格式的配置文件。 一般适用于游戏配置生成。
luban创新性提出定义+数据源的设计,实现了完备的类型系统,增强了excel格式,同时提供json,xml,lua等多种数据源支持,统一了数据定义,加载,检验,数据导出及代码生成的游戏配置管道,彻底解决了中大型项目中...
使用python可以将excel转成cocos 用的lua json 和js文件。内涵一键安装程序 是之前上传的更新版
打开cocos2dx-lua项目生成的csb,json文件
Jsoncc 生成将 C 结构映射到 JSON 的 C 代码,反之亦然。 规范格式看起来类似于 JSON。 有关示例,请参见 tst/test.x。 特征 类型:整数、实数、布尔值、字符串、对象、数组和任何。 将 json 解码为预定义的结构。...
Lua图书馆一些适用于Dota 2插件的lua库。 当前可用的库: PseudoRNG-一个... (在addon_game_mode.lua Activate()之前不需要) API-JSONDumper-将对象转储为JSON格式,可通过转储_G来转储dota lua API。 可以在库文件
只需要一个简单的 json 配置即可生成你需要的海报... 详细文档 新版功能更丰富 基于 java 开发,部署和二次开发更方便 图片将上传到 公共 CDN,不占用主机磁盘,且速度更快 支持结果缓存,相同的 海报配置 不会重复...
创建轨道服务在新目录中,生成服务: yo angular-orbit安装依赖: luarocks install orbitluarocks install luasql-sqlite3luarocks install JSON4Lua运行服务: orbit app.lua您的服务将在。创建持久化实体生成实体...
1. 支持把Excel表中数据一键转换成各种常见文件格式:xml/json/lua/csv/db; 2. 可以一键生成配置表的C#版解析类,无需手动编写; 3. 封装了各种格式配置文件的加载解析工具; 4. 创建了一个游戏项目所有配置表数据...