Lua CJSON、2.1.0版本、MIT协议
编码(encode):
支持Lua-5.1、Lua-5.2、LuaJIT。
【安装】
【使用】
模块实例化:
> local cjson = require "cjson"
> local cjson2 = cjson.new()
>
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为数字,会自动转为字符串存储。
为了防止溢栈,我们可以限制迭代的层数,超过指定的层数,就会报错。
编码(encode):
>
lua_value = {true,{foo="bar"}}
>
json_text = cjson.encode(lua_value) => Returns: '[true,u5b8bu4f53; font-size:14px">
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