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

z5btuh9x  于 12个月前  发布在  Redis
关注(0)|答案(3)|浏览(202)

Lua脚本将空数组转换为对象。如何避免转换。

test.lua

local json_str = '{\"items\":[],\"properties\":{}}'
return cjson.encode(cjson.decode(json_str))

字符串

输出

redis-cli --eval test.lua


“{\“项目":{},\“属性":{}}”
items是一个数组[],但输出是一个对象{}

3duebb1j

3duebb1j1#

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

yks3o0rb

yks3o0rb2#

根据this great post,您可以将以下选项设置为cjson:

cjson.encode_empty_table_as_object(false)

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

sg2wtvxw

sg2wtvxw3#

这对我很有效:setmetatable(table, cjson.array_mt)

相关问题