[英]How should I represent tabular data in JSON?
我正在编写一个 API,用于通过 JSON 从 JDBC 连接的 Java Servlet 检索数据。 我选择使用 JSON 因为我们想要对浏览器中的数据进行排序和其他操作,并且我们将跨域访问数据。
由于我本质上是在 JavaScript 中进行 SQL 查询,因此返回的数据本质上是表格的。 我开始写这个是为了让你得到一个列标签列表,然后是 arrays 值,例如:
{
"columns": [
"given_name",
"surname",
],
"results": [
[
"Joe",
"Schmoe"
],
[
"Jane",
"Doe"
]
]
}
但是当我开始编写 JavaScript 来处理返回的数据时,我想知道是否最好只使用 output 键/值对的结果,例如:
{
"results": [
{
"given_name": "Joe",
"surname": "Schmoe"
},
{
"given_name": "Jane",
"surname" : "Doe"
}
]
}
如果您要返回很多结果,那就是很多重复的文本。 但是我们将传输 gzipped,所以我不太关心带宽。
基本上,我应该设计这个,以便我可以访问我的数据
$.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,因此大小无关紧要,并且客户端和服务器上的计算复杂度足够相似,这无关紧要。
对于任何感兴趣的人,这是我的图表数据..
简介两者。 后期优化。
综合其他答案:
更远:
只是另一个 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());
}
您不必将代码绑定到更紧凑但也更繁琐的格式。 只需编写一个简单的 JS 适配器来检查返回的结构中是否存在columns
。 如果缺少那你正在处理一个简单的对象数组。 如果它存在,您可以轻松地将繁琐的格式转换为更方便的格式。
FWIW 我将 go 作为第二个选项,它适合于清洁 JavaScript 正如您所观察到的,并且人类也更容易阅读和理解。 在我看来,可读性胜过从选项 1 中获得的任何一点性能提升。
我还想象如果有一天您要添加更多列或更改列的顺序,使用第一个选项,您可能需要重写很多 JavaScript,因为您将使用响应中数据的 position .
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.