【问题标题】:Lua script converts empty array to objectLua 脚本将空数组转换为对象
【发布时间】:2020-06-09 10:24:02
【问题描述】:

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

test.lua

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

输出

redis-cli --eval test.lua

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

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

【问题讨论】:

  • 这是在这里问的:stackoverflow.com/q/43272872/12918181
  • 在上述问题中,我无法找到 emptyArray() 和 toJsonStr() 函数之间的关系。您能帮我修改第二种方法吗?通过代码修复上述答案。

标签: java redis lua


【解决方案1】:

JSON 对象定义与 lua 表的主要区别在于 lua 表没有类型数组。

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

据我所知,redis 的 cjson 目前还没有解决这个问题的方法,Redis Lua Differetiating empty array and object 中提到了可能的解决方案。 (我不能争论它是否有效)

【讨论】:

    【解决方案2】:

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

    cjson.encode_empty_table_as_object(false)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-03
      • 2018-12-04
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多