Lua脚本将空数组转换为对象

5
Lua脚本将空数组转换为对象。如何避免这种转换? test.lua
local json_str = '{\"items\":[],\"properties\":{}}'
return cjson.encode(cjson.decode(json_str))

输出

redis-cli --eval test.lua

"{\"items\":{},\"properties\":{}}"

这里的items是一个数组[],但输出结果是一个对象{}


这个问题在这里被问到了:https://dev59.com/46Dia4cB1Zd3GeqPH7Ri - Darius
在上述问题中,我无法找到emptyArray()和toJsonStr()函数之间的关系。你能帮我修改第二种方法Fix by code an above answer吗? - Sumeet Kumar Yadav
3个回答

3

根据这篇优秀的文章,你可以将以下选项设置为cjson:

cjson.encode_empty_table_as_object(false)

所以cjson.encode({dogs = {}})解析为{"dogs": []}

3
JSON对象定义和Lua表的主要区别在于,Lua表没有类型数组。
空的JSON数组[]或对象{}将被转换为Lua表{},但是空的Lua表{}可以转换为数组[]或对象{}。
据我所知,目前Redis的cjson对这个问题没有解决方案,可能的解决方案在Redis Lua Differetiating empty array and object中提到。(我不能确定它是否有效)

0
这对我有用: setmetatable(table, cjson.array_mt)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接