【问题标题】:Sort JSON by names and not values按名称而不是值对 JSON 进行排序
【发布时间】:2018-05-24 19:32:41
【问题描述】:

我在java中运行一个查询来获取一个时间间隔内的调用数量,这个查询的结果是:

  Date(dd/mm/yyyy)     |    calls
  _____________________|___________
  17/05/18             |    30
  16/05/18             |    36
  10/05/18             |    14
  27/04/18             |    12
  26/04/18             |    90

但是当我使用图表js绘制结果时,数据按如下顺序显示

  Date(dd/mm/yyyy)     |    calls
  _____________________|___________
  10/05/18             |    14      
  26/04/18             |    90
  27/04/18             |    12
  16/05/18             |    36
  17/05/18             |    30

¿如何使用 javascript 按日期对 JSON 进行排序?

{2018-05-10: "14", 2018-04-26: "90", 2018-04-27: "12", 2018-05-16: "36", 2018-05-17: "30"}

【问题讨论】:

  • 按日期,还是按间隔内的呼叫次数?
  • 请显示负责获取此数据的代码以及您如何初始化图表。

标签: javascript java json


【解决方案1】:

首先,您的 JSON 无效。这些属性名称(日期)必须作为字符串引用才能有效。

现在,解决此问题的最佳方法是将您生成的 JSON 实际更改为数组:

data = [
    { "date": "2018-05-10", "hits": "14" },
    { "date": "2018-04-26", "hits": "90" },
    // etc
];

如果您在服务器上生成它应该很容易更改,那么在客户端处理它应该会容易得多。事实上,如果您可以将服务器上的日期格式化为YYYY-MM-DD,那么,鉴于上述情况,Chart.js 应该会自动将其理解为日期,您可以简单地将其映射到 x 轴,例如...

let data = ... // The array above
let chartData = data.map(function(p) {
    return { x: p.date, y: p.hits };
});

var chart = new Chart(ctx, {
    type: '...',
    data: chartData,
    // etc
});

如果由于某种原因您无法更改生成的 JSON 的格式(当然,您仍然引用日期以使 JSON 有效),那么您可以尝试以下操作:

let data = ... // Your JSON corrected to be valid

let chartData = Object.keys(data).map(function(k) {
    let date = k.split('/').reverse().join('-');
    return { x: date, y: data[k] };
});

var chart = new Chart({
    type: '...',
    data: chartData,
    // etc
 });

【讨论】:

    猜你喜欢
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 2015-01-10
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多