cjson中的稀疏数组encode

1 篇文章 0 订阅

lua中的cjson扩展一直是比较好用的json处理扩展,但是在处理数字索引时对于索引下标不连续的悉数数组确有一些特殊的处理方式。

在默认情况下只要不连续的数量少于10就会被null填补上,但最大索引大于10或最大索引大于数组数量一倍时就会抛出“Cannot serialise table: excessively sparse array”

这是由于cjson处理稀疏数组时有一个安全处理的条件具体可以查看lua-cjson的文档3.11


通过cjson.encode_sparse_array()可以查看到当前的对应配置值
例如,默认情况下:

print(cjson.encode_sparse_array())
输出:
false 2 10

这里返回的三个参数分别表示为:极度稀疏数组(excessively sparse array)是否转为字符串索引,最大索引号与元素数量的安全比例,超出安全比例时最大索引值上限。

了解了这些后就可以按需要来设置相关值,比如允许字符串索引时:

cjson.encode_sparse_array(true)
print(cjson.encode({[1000]="data"}))

将输出:

{"1000":"data"}

而如果将比例设为0:

cjson.encode_sparse_array(false, 0)
print(cjson.encode({[11]="data"}))

将输出:[null,null,null,null,null,null,null,null,null,null,"data"]


正确的设置参数后将避免excessively sparse array异常出现的问题


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值