值小于长度的数组-json中的null开销
Array with less values than length - null-overhead in json
我正在写一个简单的游戏。它基于一个32x32平方的字段。每个方块都可以包含一个游戏元素。当一个元素出现/移动/更改时,服务器会通过websocket向所有客户端发送一个json对象,该对象包含一个2d数组,该数组类似于整个游戏场及其所有元素。
当每秒多次发送到多个客户端时,这是相当多的数据。
所以我想知道如何才能减少这种情况。
我认为从客户端已经收到的大数组中删除所有内容会有所帮助。但如果你有这样的东西:
var gameField = [];
gameField[6][10] = "player1";
console.log(JSON.stringify(gameField));
它转换为:
[null,null,null,null,null,null,[null,null,null,null,null,null,null,null,null,null,"player1"]]
这真的是不必要的开销。
难道它不能生成这样的东西吗?
{"6": {"10":"player1"}}
我正在使用node.js作为游戏服务器btw.
那么我该如何减少数据呢?是否有一种特殊的JSON.stringify方法?
您可以使用对象而不是数组。
var gameField = {};
gameField[6] = gameField[6] || {};
gameField[6][10] = "player1";
console.log(JSON.stringify(gameField));
您可以使用replacer函数自定义json解析。然而,解析reviver
将取决于如何识别内部对象。例如,如果内部对象是字符串,如示例所示:
var gameField = [];
gameField[6] = [];
gameField[6][10] = "player1";
function replacer(key,val){
if(val instanceof Array){
return val.reduce((o,el,i)=>{
if(el)o[i] = el;
return o;
},{});
}
return val;
}
var json = JSON.stringify(gameField, replacer);
console.log("JSON: ", json);
function reviver(key,val){
if(typeof val === 'string')
return val;
return Object.keys(val).reduce((arr,k) =>{
arr[k] = val[k];
return arr;
}, [] );
}
gameField = JSON.parse(json, reviver);
console.log("Parsed: ", gameField);
如果要从数组中删除null,请使用下划线库。
npm install underscore --save
在相关代码所在的文件中,
var _ = require('underscore');
要删除null,只需通过
result = _.filter(result, function(item){
return item!= null;
});
result
将是一个没有任何null的数组。
相关文章:
- 区分JSON中的矩阵和列表列表
- 使用angularjs列出JSON中的字段值
- 通过JSON中的值增加
- 使用Angular显示JSON中的HTML
- 试图在Windows上执行package.json中的脚本会引发JScript错误
- 如何使用amcharts中的dataloader将对象加载为JSON中的数据字段
- 返回JSON中的下标
- 只将JSON中的属性加载到现有的javascript对象中,而不破坏方法
- 使用Angular.js解析JSON中的嵌套对象数组
- 使用angular显示复杂json中的列表
- JS/JON-通过JS访问JSON中的多个数组
- Javascript:获取 JSON 中的值计数
- 使用Javascript将Json中的unicode转换为HTML
- 如何将这些数据编码为JSON中的父/子结构
- 如何使用php以json中的数组形式返回mysql-select
- 将JSON中的时间转换为实际播放PHP的时间
- 使用车把仅为 JSON 中的特定键生成 DOM 内容
- 摆脱 JSON 中的双引号
- 无法找到在 YouTube API 中转义 json 中的引号的方法
- 替换 JSON 中的字符串