我没有实现太多JSON,所以我很好奇是否有建议的处理数据的方法。我猜测有两种主要方法(也许它们是无效的JSON),但我想看看是否有任何额外的优缺点或更好的方法?
方法1 :键/值对的组合
var all_in_one = { "person" : [{
"firstName" : "John",
"lastName" : "Smith",
"phone" : [{
"areaCode" : "800",
"number" : "222-3333"
},
{
"areaCode" : "800",
"number" : "222-3334",
"extension" : "1111"
}]
},
{
"firstName" : "John",
"lastName" : "Rolfe"
},
{...}],
"other" : [{...}]
};
好处:
问题:
方法2 :从值中分离键
var json = { "model" : { "person" : ["firstName","lastName",["areaCode","number","extension"]],
"other" : [...]
},
"data" : { "person" : [["John","Smith",[["800","222-3333",undefined],
["800","222-3334","1111"]]],
["John","Rolfe",[[undefined,undefined,undefined]],
[...]
],
"other" : [...]
}
};
好处:
问题:
答案 0 :(得分:2)
我从未见过有人使用方法2.它没有将“数据与模型”分开;无论如何,这是没有意义的,因为数据 模型。你所做的就是很难说出任何数据是。
我想现在你可以在一个地方重命名一个字段,但这必须是最不常见的模式更改类型之一。添加字段,移动字段,删除字段,交换两个字段,使字段可选等等都将是无法验证的噩梦。
(至于开销,gzip将在线上处理它,并且你的JSON解码器和/或语言有望足够聪明,可以为每个重复的键重用相同的字符串对象。)
答案 1 :(得分:1)
我从未以对象的形式看过你的方法2,但它看起来非常类似于数据表,其中第一个数组包含列名,其他数据包含数据。
我看到第二种方法存在两个主要问题:
明显的好处是数据大小要小得多,因为属性名称不需要重复。
底线:如果数据很好地适合表格(只有几个空单元格)并且数据集很大,我会使用第二种方法。
[编辑]关于你的问题“我很好奇我是否应该传递其他元数据”,这绝对是第二种方法的额外好处。正如我在评论中已经提到的,Google Visualization就是一个很好的例子。我也使用Microsoft SharePoint 2013,它正是这样做的。以下是SharePoint的示例:
{"Name": "Editor",
"FieldType": "User",
"RealFieldName": "Editor",
"DisplayName": "Modified By",
...
"AllowGridEditing": "FALSE"}