Json有兩種常用的數(shù)據(jù)類型:object 和 array
object : 被 {} 包裹的對(duì)象
array :被 [] 包裹的數(shù)組
看案例
local cjson = require "cjson"
local tab= {}
tab.name= "demo"
tab.likes = {}
local str_encode = cjson.encode(tab)
ngx.say(str_encode)
{"likes":{},"name":"demo"}
cjson對(duì)于空的table或南,會(huì)默認(rèn)處理為object焊夸,對(duì)于Lua本身,是無(wú)法區(qū)分空數(shù)組和空字典的(數(shù)組和字典融合到一起了)磨淌,但是對(duì)于強(qiáng)類型語(yǔ)言(C/C++, Java等)级遭,這時(shí)候就會(huì)出現(xiàn)問(wèn)題望拖,必須作容錯(cuò)處理
-- 方案一 使用metatable將table標(biāo)記為array
setmetatable(tab.likes, cjson.empty_array_mt)
ngx.say(cjson.encode(tab))?
{"likes":[],"name":"demo"}
-- 方案二 使用encode_empty_table_as_object方法
cjson.encode_empty_table_as_object(false)
ngx.say(cjson.encode(tab))?
{"likes":[],"name":"demo"}
-- 方案三 使用第三方庫(kù) dkjson
local dkjson = require "dkjson"
local tab= {}
tab.name= "demo"
tab.likes = {}
local str_encode = dkjson.encode(tab)
ngx.say(str_encode)
{"likes":[],"name":"demo"}
其他(cjson.empty_array)
local cjson = require "cjson"
local json = cjson.encode({? ??
? ? ? ? foo = "bar",? ??
? ? ? ? some_object = {},? ??
? ? ? ? some_array = cjson.empty_array
})
ngx.say(json)
{"some_object":{},"foo":"bar","empty_array":[]}