加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cjson中的稀疏数组encode

发布时间:2020-12-16 19:07:15 所属栏目:百科 来源:网络整理
导读:lua中的cjson扩展一直是比较好用的json处理扩展,但是在处理数字索引时对于索引下标不连续的悉数数组确有一些特殊的处理方式。 在默认情况下只要不连续的数量少于10就会被null填补上,但最大索引大于10或最大索引大于数组数量一倍时就会抛出 “Cannot serial

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,"data"]


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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读