当使用JSON从同一个类发送对象数组时,对象字段会重复多次,通常是不必要的,并且对于长度较大的数组,消息会变得很长。据我所知,没有办法只使用JSON删除字段的重复。所以我正在寻找一种解决方案来解决数组的编码和解码,而无需重复字段名称。
例如,下面的数组:
答
[
{id:1;name:Name 1;description:Description 1},
{id:2;name:Name 2;description:Description 2},
...,
{id:N;name:Name N;description:Description N}
]
可以表示为:
B:
{
fields:[id, name, description],
values:[
[1,Name 1,Description 1],
[2,Name 2,Description 2],
...,
[N,Name N,Description N]
]
}
在长度较大的数组中花费的空间更少。
但是我需要一个自动完成这种转换的解决方案(从A到B,从B到A)。它可以使用B represantation或更好的方法,通过消除字段名称来减少邮件大小。
任何解决方案?
答案 0 :(得分:1)
您可以通过编写两个简单的javascript函数根据需要进行编码和解码来实现此目的。为了使此模式起作用,必须应用一些规则:
function minifyObject(obj) {
var fields = Object.keys(obj[0]);
var values = [];
for(var record in obj) {
var value = [];
for(var field in fields) {
value.push(obj[record][fields[field]]);
}
values.push(value);
}
return {
fields: fields,
values: values
}
}
function unminifyObject(obj) {
var output = [];
for(var i = 0; i < obj.values.length; i++) {
var record = {};
for(var j = 0; j < obj.fields.length; j++) {
record[obj.fields[j]] = obj.values[i][j];
}
output.push(record);
}
return output;
}
var data = [
{"id":1, "name": "Name 1", "description": "Description 1"},
{"id":2, "name": "Name 2", "description": "Description 2"},
{"id":3, "name": "Name 3", "description": "Description 3"}
];
var minified = minifyObject(data);
console.log("Minified object\n", minified);
var unminified = unminifyObject(minified);
console.log("Unminified array\n", unminified);
也可以使用ES6简化此代码。
您还可以在这里找到我的测试JSON转换器:https://zikro.gr/dbg/so/20129724/