较小的JSON格式

时间:2012-10-13 13:11:51

标签: json serialization deserialization

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

3 个答案:

答案 0 :(得分:1)

JSON DBRJSON应该是您正在寻找的。您很可能必须自己实现序列化器/反序列化器(虽然已经在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文档与您上面建议的文档大小相同。