我将开发一个推送服务器(HTML5 WebSocket / Polling),为了减少数据包的大小(以JSON格式呈现),我想用数据包做这样的事情:
[["id", "username", "password"], [1, "afshin", "123"], [2, "barak", "meme"]]
而不是清晰的JSON格式,如:
[{"id": 1, "username": "afshin", "password": "123"}, {"id": 2, "username": "barak", "password": "meme"}]
确切地说,我想阻止在每个对象中发送合同属性。
所以,我想知道是否有任何库(或类似的东西)?我在服务器上使用C#,在客户端使用JavaScript。
答案 0 :(得分:1)
JSON DB或RJSON应该是您正在寻找的。您很可能必须自己实现序列化器/反序列化器(虽然已经在JS中实现了RJSON)。
至于压缩纯JSON,我认为您可以通过将所有数据包装在单个对象条目中来绕过“需要密钥”规则:
{"data" : [["id", "username", "password"], [1, "afshin", "123"], [2, "barak", "meme"]]}
答案 1 :(得分:1)
因此,除了反对手动压缩的所有论据之外,这将是一个解决方案:
var input = [{"id": 1, "username": "afshin", "password": "123"}, {"id": 2, "username": "barak", "password": "meme"}];
var keys = {}
input.map ( function (e) { Object.keys(e).map( function (k) { keys[k] = 1; })});
var output = [ Object.keys(keys) ] .concat( input.map( function (e) {
return Object.keys(keys).map( function (k) { return e[k]; } );
} ) );
console.log(output);
和Node.js产生:
[ [ 'id', 'username', 'password' ],
[ 1, 'afshin', '123' ],
[ 2, 'barak', 'meme' ] ]
我真的不知道这是否适用于所有浏览器等。
答案 2 :(得分:0)
通过删除名称 - 值对的名称,您将破坏JSON语法规则。实际上,它不是JSON。您还可能会导致JSON客户端反序列化出现问题。你能考虑缩短名字的长度吗?
[{"id": 1, "u": "afshin", "p": "123"}, {"id": 2, "u": "barak", "p": "meme"}]
此JSON文档与您上面建议的文档大小相同。