我应该如何在 JSON 中表示表格数据?

新手上路,请多包涵

我正在编写一个 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,因此大小无关紧要,并且客户端和服务器上的计算复杂度非常相似,因此无关紧要。

对于任何感兴趣的人,这是 我的图表数据!。

原文由 Justin Force 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 401
2 个回答

综合其他答案:

  1. 您的有线格式不必与您的内存格式相同。
  2. 配置文件哪个更好 - 看看它是否有所作为。
  3. 通常越简单越好。

更远:

  • 如果你只有一页结果,用户很少,那么第二种格式 可能 不会比第一种格式差。
  • 如果您的数据非常稀疏,则第二种格式 可能 会更好。
  • 如果您要发送 1000 或几行数据,并且您有数百万用户,那么您发送的数据大小可能会开始变得重要,也许第一种格式 可能会 有所帮助。
  • 您不能保证所有用户代理都支持 gzip / deflate,所以请记住这一点。

原文由 Robert Paulson 发布,翻译遵循 CC BY-SA 3.0 许可协议

简介两者。后期优化。

原文由 Alex Reynolds 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题