我正在编写一个API,用于通过JSON从JDBC连接的Java Servlet中检索数据。我选择使用JSON,因为我们想要对浏览器中的数据进行排序和其他操作,我们将从跨域访问数据。
由于我本质上是在JavaScript中进行SQL查询,因此返回的数据本质上是表格式的。我开始编写这个,以便您返回列标签列表,然后返回值数组,例如:
{
"columns": [
"given_name",
"surname",
],
"results": [
[
"Joe",
"Schmoe"
],
[
"Jane",
"Doe"
]
]
}
但是当我开始编写JavaScript来处理返回的数据时,我想知道用键/值对输出结果是否更好,例如:
{
"results": [
{
"given_name": "Joe",
"surname": "Schmoe"
},
{
"given_name": "Jane",
"surname" : "Doe"
}
]
}
如果你返回了很多结果,那就是很多重复的文字。但是我们将要运输gzip,所以我不太关心带宽。
基本上,我应该设计这个,以便我用
访问我的数据$.getJSON(query, function(data) {
var columns = data.columns;
var results = data.results;
$.each(results, function(key, row) {
console.log(row[columns.indexOf('surname')]);
});
});
或者更漂亮的
$.getJSON(query, function(data) {
var results = data.results;
$.each(results, function(key, row) {
console.log(row.surname);
});
});
基本上,我想知道对性能的潜在影响是否证明了后一种选择的更清晰的语法。
我确实实现了它的方式和配置文件。 分析是一个好主意!性能差异很小。数据传输大小的差异很大,但是使用Gzip压缩时,非常大和非常小的数据集之间的格式和之间的差异降至5-6%。所以我会选择更漂亮的实施方案。对于这个特定的应用程序,我可以期望所有客户端都支持Gzip / Deflate,因此大小无关紧要,客户端和服务器上的计算复杂性足够相似,无关紧要。
对于任何有兴趣的人,这里是my data with graphs!。
答案 0 :(得分:7)
两者都有。之后进行优化。
答案 1 :(得分:7)
综合其他答案:
此外:
答案 2 :(得分:2)
您不必将代码绑定到更紧凑,但也更麻烦的格式。只需编写一个简单的JS适配器来检查返回的结构是否存在columns
。如果缺少那么你正在处理一个简单的对象数组。如果它存在,您可以轻松地将繁琐的格式映射到更方便的格式。
答案 3 :(得分:1)
FWIW我会选择第二个选项,它可以让你看到更清晰的JavaScript,并且人们也可以更容易阅读和理解。在我看来,可读性胜过从选项1获得的任何小的性能提升。
我还想象如果你要添加更多列或者某天更改列的顺序,使用第一个选项,你可能需要重写很多JavaScript,因为你将使用这个位置响应中的数据。
答案 4 :(得分:1)
只是另一个JSON结构,我得到了非常好的结果:
{
"recordCount": 2,
"data": {
"Id": [1, 2],
"Title": ["First record", "Second record"]
"Value": [18192, 18176]
}
}
遍历所有数据:
for (var i = 0; i < recordSet.recordCount; ++i) {
console.log("Record " + i.toString() + ":");
for (var field in recordSet.data)
console.log("\t" + field + ": " + recordSet.data[field][i].toString());
}