cjson中的稀疏数组encode
2015-06-05 11:16
501 查看
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)是否转为字符串索引,最大索引号与元素数量的安全比例,超出安全比例时最大索引值上限。
了解了这些后就可以按需要来设置相关值,比如允许字符串索引时:
将输出:
{"1000":"data"}
而如果将比例设为0:
将输出:[null,null,null,null,null,null,null,null,null,null,"data"]
正确的设置参数后将避免excessively sparse array异常出现的问题
在默认情况下只要不连续的数量少于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异常出现的问题
相关文章推荐
- js键盘事件全面控制详解
- JSPatch 实现原理详解
- 学习javascript书籍推荐
- 圆形进度条的实现方法
- js判断手机访问
- ECMA-262,第 5 版。最新 JavaScript 规范 了解 ECMAScript 规范的历史,查看它的众多重要新特性和新概念。
- JSON字符串和JS对象之间的转换
- Json简单学习
- javascript转换日期字符串为Date对象
- 简介JavaScript中Boolean.toSource()方法的使用
- Extjs杂记录
- json和数组的区别
- JavaScript 函数用途
- gedit 格式化json
- ExtJS 修改load paging时的参数
- js table增加一行,显示每列总和
- JavaScript中constructor()方法的使用简介
- Js、css代码文件规范
- eval、json.parse()的介绍和使用注意点
- js中调用函数时加不加括号的问题