[英]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.