`
cwqcwk1
  • 浏览: 86742 次
文章分类
社区版块
存档分类
最新评论

linux下编译和使用lua及cjson

 
阅读更多

前面的文章记录了lua的编译和使用,这里再整理一下,侧重说明下lua json库的编译及使用,文章最后再谈下cjson使用中有可能遇到的excessively sparse array 问题及解决方法。


lua编译

lua的源代码安装过程挺简单的,以lua5.3为例
# wget http://www.lua.org/ftp/lua-5.3.2.tar.gz
# tar -zxf lua-5.3.2.tar.gz
# cd lua-5.3.2
# make linux
# make install
注意了,lua没有 ./configure 这个命令,需要编辑配置可修改 Makefile,例如 INSTALL_BIN,默认是 /usr/local/bin, 表示安装后lua命令就是 /usr/local/bin/lua

lua编译过程出现异常,最常见有3个:
1. 缺少readline,显示error: readline/readline.h: No such file or directory ...
2. 缺少ncurses,显示 libreadline.so: undefined reference to `PC' ...
3. 整数编译报错,显示 Compiler does not support 'long long ...
解决方法参考我的另外一篇文章

cjson编译

cjson是lua使用广泛的json库,编译过程如下:
# wget http://www.kyne.com.au/~mark/software/download/lua-cjson-2.1.0.tar.gz
# tar -zxf lua-cjson-2.1.0.tar.gz
# cd lua-cjson-2.1.0
# make all

然后,将cjson库加到lua库目录
# cp cjson.so /usr/local/lib/lua/5.3
# chmod 755 /usr/local/lib/lua/5.3/cjson.so

lua使用json

现在,简单测试下lua及cjson的使用。
# /usr/local/bin/lua
Lua 5.3.2  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> cjson = require "cjson"
> json = cjson.new()
> json_text = '{ "foo": "bar" }'
> value = json.decode(json_text)
> for k,v in pairs(value) do print("json", k, v) end
json    foo     bar
> list = { foo = "bar" }
> return  json.encode(list)
{"foo":"bar"}

cjson的优缺点:

优点:快,支持utf8,没有其他库依赖,MIT开源
缺点:不支持utf16及utf32,2012年之后就没更新了

cjson常见问题

1. excessively sparse array 问题
cjson库在使用中经常有遇到这个问题,这个问题其实很好解决。
> json.encode({[11]=1})
stdin:1: Cannot serialise table: excessively sparse array
stack traceback:
        [C]: in field 'encode'
        stdin:1: in main chunk
        [C]: in ?
如果所有的key都是数字,cjson会使用类似数组的形式来记录数据,记为sparse array,这种形式的好处是减少key占用的字符串大小。但是,当最大的key大于10,并且超过了元素个数的2倍时,就会报这个错误。
另外,还有可能出现下面这种情况。
> json.encode({[10]=1})
[null,null,null,null,null,null,null,null,null,1]

这里,cjson提供了接口解决这个问题,也就是 json.encode_sparse_array(true,1)
# /usr/local/bin/lua 
> cjson = require "cjson" 
> json = cjson.new() 
> json.encode_sparse_array(true,1) 
true 1 10
> json.encode({[11]=1}) 
{"11":1} 
> json.encode({[2]=1}) 
{"2":1} 
> json.encode({[1]=1, [2]=2}) 
[1,2] 
> json.encode({1,2,3}) 
[1,2,3] 
这种情况,只有当table是一个纯数组时,才会转换成sparse array,否则都记为 object,这样就和其他json化工具很像了,比如php的json_encode

参考:http://blog.csdn.net/mycwq/article/details/51069297
分享到:
评论

相关推荐

    lua_cjson_2.1.0

    下载完成后,解压到本地目录,你会看到lua_cjson_2.1.0这个文件夹,其中包含了所有必要的源代码和编译所需的配置文件。 编译lua_cjson涉及以下步骤: 1. 打开Visual Studio 2013。 2. 创建一个新的C++项目,选择Win...

    lua-cjson.dll

    编译好的lua-cjson.dll,亲测可用。 版本:lua-cjson-2.1.0 git地址:https://github.com/openresty/lua-cjson lua json库官方比较:http://lua-users.org/wiki/JsonModules

    lua-cjson-2.1.0

    `lua-cjson`是Lua编程语言中一个高效且功能丰富的JSON(JavaScript Object Notation)解析和序列化库,版本2.1.0提供了稳定性和性能上的优化。这个库使得在Lua环境中处理JSON数据变得异常简单,尤其在Web开发中,如...

    lua-cjson-2.1.0-已编译

    2. `lua_cjson.luac` 或 `lua_cjson.lua`:这是Lua源代码或预编译的脚本,定义了如何在Lua环境中使用cjson模块。 3. `README`:包含库的使用说明、安装指南和许可信息。 4. `LICENSE`:库的授权协议,规定了用户可以...

    lua-cjson-2.1.0(VS2013版本编译完整项目)

    在CMakeLists.txt中,lua-cjson的构建配置已经定义好,包括所需的lua库和编译选项。 3. **生成VS2013项目文件**: 在CMake中选择Visual Studio 2013作为生成器,然后点击“Configure”,接着点击“Generate”生成...

    Lua cjson库在windows版本cjson.dll

    找了老半天都没有windows版本的cjson.dll库,只能手动编译。 下载:http://www.kyne.com.au/~mark/software/lua-cjson.php 转换为vs2005工程后编译出错,把所有static inline的函数修改为static的,把一些不...

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

    用户只需将这个.dll文件放置在Lua的安装目录下的"clibs"子目录中,无需进行额外的编译步骤,即可直接在Lua环境中使用。这为开发者提供了便利,因为他们可以快速地在自己的项目中集成cjson库,而无需关心编译细节。 ...

    lua_cjson vs2013 项目,已经编译通过

    cjson 在windows 平台的编译工程,找了很多都没有,下载没有积分,只好自己动手了,测试通过的,里面包含了lua_cjson 的源码,解压后进入目录,build 文件夹下的 sln 解决方案,打开即可,也有已经生成的 cjson.lib ...

    android ndk lua5.1.5 (加入了lua_cjson)

    6. **在Java代码中调用**:最后,在Java代码中,你可以使用`System.loadLibrary("lua")`和`System.loadLibrary("lua_cjson")`来加载这两个库,并通过JNI接口调用Lua和lua_cjson的功能。 通过以上步骤,你就成功地在...

    lua-cjson.dll x64版本

    lua-cjson win32版本的dll,照着教程用mingw编译出来了。但是项目需要x64的,没成功,用vs2015重新编译成功了,改了一些报错。基于 lua5.3.5

    lua-cjson decode中null改成nil

    4. 编译并链接修改后的lua-cjson库,然后在你的项目中使用这个定制版的库。 请注意,这样做可能会打破一些期望`nil`的行为,因为在Lua中,`nil`和任何值都不相等,而`"null"`字符串与其他字符串或变量可以进行比较...

    lua5.1 cjson.dll模块

    cjson.dll 需要lua5.1.dll 调用require “cjson” cjson.dll 需要lua5.1.dll 调用require “cjson”

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

    lua第三方库cjson-2.1.0, 编译不易, 在此提供快捷下载, 下载后置于%lua_home%/clibs中 可能需要重启电脑 可参见文章自行编译:https://blog.csdn.net/qq_35566365/article/details/88625009

    Lua CJSON 源码

    Lua CJSON 为 Lua 语言提供高性能的 JSON 解析器和编码器,其性能比纯 Lua 库要高 10 到 20 倍。Lua CJSON 完全支持 UTF-8 ,无需依赖其他非 Lua/LuaJIT 的相关包。

    lua-cjson和LuaJIT.zip

    lua-cjson 是一个简单小巧的开源动态库,可被 Lua 脚本 require 加载在 Lua 中通过一系列的 lua-cjson API 调用完成 Lua 值与 Json 值的相互转换(编码及解码)。 使用方式参考:...

    已在window编译的LuaBitOp-1.0.2(bit.dll)和lua-cjson-2.1.0(cjson.dll).zip

    将`bit.dll`和`cjson.dll`复制到Lua的`clibs`目录下,意味着这些库可以被Lua解释器自动加载。在运行Lua脚本时,只要正确地require这两个库,就可以直接在脚本中使用它们提供的功能。例如,引入`bit`库后,可以进行...

    lua-cjson 2.1 dll下载

    window下的lua-cjson.dll window下的lua-cjson.dll window下的lua-cjson.dll window下的lua-cjson.dll

    linux下编译通过的lua库_5.1.4

    在Linux环境下,Lua是一种轻量级的脚本语言,常被用作嵌入式编程,游戏开发,服务器脚本等场景。这篇描述提及的是已经成功在Linux系统上编译通过的Lua库,版本为5.1.4。Lua 5.1.4是该语言的一个稳定版本,发布于2009...

    lua-cjson.7z

    为了在Windows环境下使用lua-cjson,你需要: - 安装一个C编译器,例如Visual Studio。 - 解压"lua-cjson.7z"并打开工程文件,编译生成cjson库。 - 将生成的库文件(.dll或.lib)放在适当的位置,以便Lua能找到。 - ...

    lua-cjson 适用于lua5.2

    这使得从服务器接收到的JSON数据可以直接在Lua中使用,例如`local lua_table = cjson.decode('{"name":"John","age":30}')`,lua_table将是一个包含字段"name"和"age"的Lua表。 3. `safe_decode`:当JSON字符串可能...

Global site tag (gtag.js) - Google Analytics