-- 内容节选lua-cjson-2.1.0.2/tests/agentzh.t
=== TEST 1: empty tables as objects
--- lua
local cjson = require("cjson")
print(cjson.encode({}))
print(cjson.encode({dogs = {}}))
--- out
{}
{"dogs":{}}
=== TEST 2: empty tables as arrays
--- lua
local cjson = require("cjson")
cjson.encode_empty_table_as_object(false)
print(cjson.encode({}))
print(cjson.encode({dogs = {}}))
--- out
[]
{"dogs":[]}
综合本章节提到的各种问题,我们可以封装一个 json_encode 的示例函数:
local json = require("cjson")
-- 稀疏数组会被处理成 object
json.encode_sparse_array(true)
local function _json_encode(data)
return json.encode(data)
end
function json_encode( data, empty_table_as_object )
-- Lua 的数据类型里面,array 和 dict 是同一个东西。对应到 json encode 的时候,就会有不同的判断
-- cjson 对于空的 table,就会处理为 object,也就是 {}
-- 处理方法:cjson 使用 `encode_empty_table_as_object` 这个方法。
json.encode_empty_table_as_object(empty_table_as_object or false) -- 空的 table 默认为 array
local ok, json_value = pcall(_json_encode, data)
if not ok then
return nil
end
return json_value
end