lua cjson
来源:互联网 发布:原油行情软件 编辑:程序博客网 时间:2024/04/26 21:02
Lua CJSON安装和使用
2012-12-01 10:08:39| 分类:Lua | 标签:lua cjson 安装 使用 |举报|字号 订阅
Lua CJSON、2.1.0版本、MIT协议
支持UTF-8,不支持UTF-16和UTF-32。 #没有任何影响。
支持Lua-5.1、Lua-5.2、LuaJIT。
【安装】
方法一:修改Makefile设置PREFIX变量为/usr/local/lua,然后执行make install即可。
方法二:执行make,然后cp cjson.so $LUA_MODULE_DIRECTORY即可。
【使用】
模块实例化:> local cjson = require "cjson"
Lua CJSON不会自动创建一个模块table的全局变量,要自己赋给一个叫"cjson"的变量。
> local cjson2 = cjson.new()
创建一个cjson模块的独立副本给cjson2,可以拥有各自不同的encoding buffer和默认配置。
> local cjson_safe = require "cjson.safe"
cjson.safe模块几乎与cjson模块一样,只是cjson只能在JSON转码过程中立即报错,而cjson.safe则不会立即报错,而是返回nil和一条错误信息。
解码(decode):
> json_text = '[true, {"foo":"bar"}]'
> lua_value = cjson.decode(json_text) => Returns: {true, {foo="bar"}}
cjson.decode会把一个UTF-8的JSON字符串转为一个Lua value或table,JSON中的null会转为一个空的lightuserdata,可以与cjson.null进行比较,如果JSON中的key为数字,会自动转为字符串存储。
> setting = cjson.decode_invalid_numbers(setting) #setting为true或false,默认为true
当解码一个JSON不支持的数字(infinity,NaN或hexadecimal)时,JSON会报错。默认setting为true,允许接收并解码非法数字,如果setting为false,就会报错。
> depth = cjson.decode_max_depth([depth]) #depth为正整数,默认为1000层。
为了防止溢栈,我们可以限制迭代的层数,超过指定的层数,就会报错。
编码(encode):
> lua_value = {true, {foo="bar"}}
> json_text = cjson.encode(lua_value) => Returns: '[true, {"foo":"bar"}]'
cjson.encode会把一个Lua value或table转为一个UTF-8的JSON字符串。支持的Lua类型有boolean、空lightuserdate、nil、number(最多14位有效数字)、string和table,不支持的Lua类型有function、非空lightuserdata、thread和userdata。在UTF-8字符串中要转义(加/)的字符有ASCII 0~31(控制字符)、ASCII 34(")、ASCII 47(\)、ASCII 92(/)、ASCII 127(Delete)。如果Lua table中的key全是正整数,会转为JSON array([ ]),否则转为JSON object({ }),Lua JSON只支持key为number和string,其他类型会报错,它不会使用元方法,只会使用rawget遍历Lua array,使用next遍历Lua object,Lua array和Lua object其实都是Lua table。
> setting = cjson.encode_invalid_numbers([setting]) #setting为true、null或false,默认为false
当编码一个Lua浮点数时可能会产生一个JSON不支持的数字(infinity或NaN),true表示允许编码这些非法数字,可能产生一个不标准的JSON表示,null表示把所有的非法数字都转为JSON null值,false表示遇到非法数字报错。
> keep = cjson.encode_keep_buffer([keep]) #keep为true或false,默认为true
true表示JSON encoding buffer会一直被重用,直到JSON模块被垃圾回收为止,false表示每次调用cjson.encode都会创建和释放JSON encoding buffer。
> depth = cjson.encode_max_depth([depth]) #depth为正整数,默认为1000层
与cjson.decode_max_depth类似。
> precision = cjson.encode_number_precision([precision]) #precision为1至14,默认为14
用来设置JSON中数字的精度(有效位数)。
> convert, ratio, safe = cjson.encode_parse_array([convert[, ratio[, safe]]]) #convert为true或false,默认为false,ratio为正整数,默认为2,safe为正整数,默认为10
与编码稀疏的Lua array有关,很复杂,忽略之。
参考网页:http://www.kyne.com.au/~mark/software/lua-cjson-manual.html
0 0
- lua cjson
- 编译lua-cjson
- lua cjson 解决_luaL_setfuncs
- lua cjson应用
- lua luajit 安装cjson
- lua-cjson安装
- Lua CJSON安装和使用
- lua-cjson安装与使用
- Lua-cjson的safe模块
- Lua中cJson的读写
- windows下编译LUA-cjson
- cocos2dx lua 3.10 接入cjson
- Lua CJSON安装和使用
- Lua CJSON安装和使用
- cocos2dx lua 3.10 使用cjson
- Lua:下载安装lua-cjson,lua操作json代码
- Lua-cjson -> require(“cjson”) successful, then errors when calling cjson.encode
- linux下编译使用lua及cjson
- 电脑硬盘损坏后不见文件能恢复回来吗
- 安卓训练-开始
- 普及公钥私钥认证
- soapUI 3.5.1安装
- c#与java比较
- lua cjson
- 【Android界面实现】FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别
- Java保留两位小数的4种方法
- VLAN分类
- 关于微信sdk的注意事项与解决方案
- Java 目录
- IOS设计模式之二:Delegate模式
- c# 获取端口设备全名
- CGI程序学习(1)-搭建CGI环境和简单CGI程序测试