按名称而不是值排序JSON

时间:2018-05-24 19:32:41

标签: javascript java json

我在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"}

1 个答案:

答案 0 :(得分:0)

首先,您的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
 });