2

我将开发一个推送服务器(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。

4

3 回答 3

1

JSON DBRJSON应该正是您正在寻找的。您很可能必须自己实现序列化器/反序列化器(尽管 RJSON 已经在 J​​S 中实现)。

至于压缩纯 JSON,我认为您可以通过将所有数据包装在单个对象条目中来绕过“需要密钥”规则:

{"data" : [["id", "username", "password"], [1, "afshin", "123"], [2, "barak", "meme"]]}
于 2012-10-13T14:02:46.197 回答
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' ] ]

我真的不知道这是否适用于每个浏览器等。

于 2012-10-13T14:41:40.987 回答
0

通过删除名称-值对的名称,您将违反 JSON 语法规则。实际上,它不会是 JSON。您还可能会导致 JSON 客户端反序列化出现问题。您能否考虑减少姓名的长度:

[{"id": 1, "u": "afshin", "p": "123"}, {"id": 2, "u": "barak", "p": "meme"}]

此 JSON 文档的大小与您在上面建议的大小相同。

于 2012-10-13T13:24:10.413 回答