Lua脚本将空数组转换为对象。如何避免转换。
test.lua
local json_str = '{\"items\":[],\"properties\":{}}' return cjson.encode(cjson.decode(json_str))
字符串
输出
redis-cli --eval test.lua
型“{\“项目":{},\“属性":{}}”items是一个数组[],但输出是一个对象{}
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中提到的。(我不能争论它是否有效)
yks3o0rb2#
根据this great post,您可以将以下选项设置为cjson:
cjson.encode_empty_table_as_object(false)
字符串所以cjson.encode({dogs = {}})解析为{"dogs": []}
cjson.encode({dogs = {}})
{"dogs": []}
sg2wtvxw3#
这对我很有效:setmetatable(table, cjson.array_mt)
setmetatable(table, cjson.array_mt)
3条答案
按热度按时间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中提到的。(我不能争论它是否有效)
yks3o0rb2#
根据this great post,您可以将以下选项设置为cjson:
字符串
所以
cjson.encode({dogs = {}})
解析为{"dogs": []}
sg2wtvxw3#
这对我很有效:
setmetatable(table, cjson.array_mt)