Lua空表编码

在我们将一个lua表编码的时候,如果这个表是一个空的,那么json就无法分辨这是一个对象还是一个数组了,因为lua本身不区分对象和数组,但是与之配合的其它语言区分就会造成问题,我们先看看默认行为:

local json = require("cjson")
ngx.say("value --> ", json.encode({dogs={}}))

输出的结果是:value --> {"dogs":{}}

我们注意到json默认是将空表编码为一个对象{}而不是数组[]

想要改变这个行为,就需要cjson的另一个api接口了:

cjson.encode_empty_table_as_object(false)

启用这个选项之后,需要编码的空表就会被编码为一个数组。