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

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

test.lua

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

输出

redis-cli --eval test.lua

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

items是一个数组 [] 但输出却是一个对象 {}

点赞
用户12918181
用户12918181

主要区别在于 JSON 对象定义和 Lua 表的不同之处在于 Lua 表没有数组类型。

空的 JSON 数组 [] 或对象 {} 转换为 Lua 表 {},但是空的 Lua 表 {} 可以转换为数组 [] 或对象 {}。

据我所知,Redis 上的 cjson 目前没有解决这个问题的方法,可能的解决方案在 Redis Lua 区分空数组和对象 中提到。(我无法确定它是否可行)

2020-02-25 20:47:41
用户6003494
用户6003494

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

cjson.encode_empty_table_as_object(false)

因此,cjson.encode({dogs = {}})解析为{"dogs": []}

2021-11-23 08:13:33