`
arust
  • 浏览: 95383 次
  • 性别: Icon_minigender_1
  • 来自: 海底
社区版块
存档分类
最新评论

Lua 生成 Json

    博客分类:
  • lang
阅读更多
经常要用 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 的序列化
分享到:
评论
1 楼 e421083458 2015-02-28  
    
请问,有没有json转table的代码?

相关推荐

    lua文本转成json文本

    lua json文件转换 数据编排 lua配置表转成 json配置表

    LUA的JSON库

    在LUA环境中,为了实现与JSON数据的互操作,开发者通常需要借助特定的LUA库来解析和生成JSON字符串。"LUA的JSON库"就是这样一个工具,它使得LUA程序能够方便地处理JSON格式的数据,从而与JavaScript环境或其他支持...

    json转lua-table工具

    在实际应用中,你可能需要将JSON数据作为输入,运行`jsonToLua.py`,然后将生成的Lua代码复制到你的项目中,或者将转换结果写入新的Lua文件,供程序直接加载。在处理大型复杂JSON数据时,确保Python脚本正确处理嵌套...

    LUA的JSON框架

    当我们谈到"LUA的JSON框架"时,通常是指在LUA中解析、生成和操作JSON数据的库或工具。 Lua的JSON框架主要提供以下功能: 1. **JSON解析**:将JSON字符串转换为LUA的数据结构,例如表(table)。这使得LUA程序能够...

    luaQrcode lua语言生成二维码

    **luaQrcode:使用Lua语言生成二维码** 在IT行业中,二维码已经成为数据交换和信息展示的常见方式,尤其在移动设备上。luaQrcode是这样一个工具,它允许开发人员使用Lua编程语言来生成二维码,从而扩展了Lua的应用...

    Json11ForLua_Lua操作Json的C扩展模块_

    Json11ForLua可能提供了API接口,使得Lua脚本可以直接调用C++编写的函数来解析和生成JSON字符串。这样的API通常包括解析JSON字符串到Lua表,以及将Lua表转换成JSON字符串的功能。 标签“Lua操作Json的C扩展模块”...

    Json.rar_LUA JSON_json lua

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,但不是JavaScript的语法,而是独立的语言无关的文本格式。在IT领域,...

    lua json插件

    lua-cjson利用了C语言的高性能特性,对于大型JSON数据,其解析和生成速度比纯Lua实现快得多。 lua-cjson作为Lua的JSON插件,因其高效和易用性,被广泛应用在需要处理JSON数据的Lua项目中,例如Web服务器、游戏开发...

    Json生成Lua代码工具

    Json文件一键生成Lua代码文件工具,需安装python27

    json4lua-0.9.50.zip

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它在Web服务和客户端交互中扮演着重要角色,因为其结构清晰,支持复杂的数据结构,比如对象和数组。...

    json2lua:使用lua脚本将json文件转换为lua代码

    4. **生成Lua代码**:转换完成后,json2lua会输出一个Lua源代码文件,这个文件中的数据结构与原始JSON文件完全等价,可以直接在Lua环境中载入和使用。 5. **在Lua中使用转换后的代码**:将生成的Lua代码保存为文件...

    cjson.rar_LUA JSON_cjson_cjson.lua_lua_piledxg

    在IT行业中,JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。在Lua环境中,处理JSON数据时,我们通常需要依赖第三方库,因为原生的Lua并不...

    lua-rapidjson:基于非常快速的RapidJSON库的Lua JSON模块

    使用`lua-rapidjson`时,主要的API包括`decode`和`encode`函数,分别用于解析JSON字符串和生成JSON字符串。此外,还可能包含其他辅助函数,比如错误处理、JSON路径查询等。 举个例子,如果你有一个JSON字符串`json_...

    lua-cjson-2.1.0 lua第三方库(已编译dll)

    在Lua中,通常需要一个库来解析和生成JSON字符串,这就是lua-cjson的作用。 **lua-cjson库详解:** lua-cjson库是Lua社区中广泛使用的JSON库,它提供了快速的JSON编码和解码功能。其核心特性包括: 1. **编码...

    lua+curl+pthread(可以请求网络JSON)

    在Lua中,有如ljson、luajson等库可以用来解析和生成JSON。当从网络获取到JSON数据后,这些库可以帮助我们将JSON字符串转换为Lua表格,便于进一步处理和分析。 具体到项目中的"LuaGame",这可能是一个使用Lua进行...

    lua-cjson-2.1.0

    JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,采用了键值对的结构,支持基本的数据类型如字符串、数字、数组、对象等。JSON因其简洁和高效的特性,...

    lua-rapidjson-master

    总之,lua-rapidjson-master是Lua生态系统中的一个重要组件,它填补了Lua在处理JSON数据上的空白,让开发者能够充分利用RapidJSON的强大功能,同时享受Lua带来的简洁和高效。对于需要在Lua环境中处理JSON数据的项目...

    json-lua:JSON编码器

    在Lua中,由于其内置不支持JSON解析和生成,因此需要使用额外的库来实现这一功能。"json-lua"就是这样一个库,它为Lua提供了JSON编码和解码的能力。 该库的核心功能包括: 1. **JSON编码(Encoder)**:将Lua数据...

    Unity Json Lua转表工具_Json Excel

    在Unity游戏开发中,数据管理是一项关键任务,而有效地存储和读取数据通常涉及使用JSON、Excel和Lua等格式。这个“Unity Json Lua转表工具”是为了帮助开发者更方便地在这些格式之间进行转换,从而优化游戏的数据...

    Lua cjson库

    接着,你可以使用`json.decode()`来解析JSON字符串,以及`json.encode()`来生成JSON字符串。 在给定的文件中,包含了一个名为"cjson.dll"的文件。这是一个动态链接库,用于Windows环境下的Lua,它提供了cjson库的...

Global site tag (gtag.js) - Google Analytics