小编典典

TL; DR表示由返回的值cjson.decode(),用于cjson.null与JSON的null值进行比较。

说明:Lua nil在表中用于标记已删除的条目。如果将JSONinc null转换为Lunatic nil,则解码的对象将损坏。因此,cjson

lib使用轻量级的userdata类型表示null/ nil。

您的“ call_data”具有一个“ date_created”字段,该字段为null-导致错误。

有趣的是,Redis与Lua一样,不会存储nil / null值,因此您必须忽略null值,或者在Redis中使用特殊值来标记它们。

假设您将忽略它们,这是一种解决方法:

local call_data = cjson.decode(ARGV[1])

local other_data = cjson.decode(ARGV[2])

local data = {}

local next = next

local null = cjson.null

local populate_data = function(source)

if next(source) == nil then

return

end

for property,value in pairs(source) do

if value ~= null then

redis.call('HSET', KEYS[2], property, value)

end

end

end

populate_data(call_data)

populate_data(other_data)

另外,一个小的优化将是批量更新,如下所示:

local payload = {}

for property,value in pairs(source) do

if value ~= null then

table.insert(payload, property)

table.insert(payload, value)

end

end

redis.call('HSET', KEYS[2], unpack(payload))

PS,如果您愿意的话,请看一下我编写的ReJSON-它旨在帮助您解决您试图做的事情。

2020-06-20

GitHub 加速计划 / cj / cJSON
15
5
下载
Ultralightweight JSON parser in ANSI C
最近提交(Master分支:4 个月前 )
c859b25d 4 个月前
74e1ff49 this fixes CVE-2025-57052 4 个月前
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐