【问题标题】:node.js sort JSON by key, which is in date formatnode.js 按键排序JSON,日期格式
【发布时间】:2020-09-08 16:54:46
【问题描述】:

我正在尝试使用 node.js,目前我正在尝试可视化汇率发展,我从 API 获取数据,现在我正在尝试按日期对它们进行排序。

我在响应中得到的数据如下所示:

{
    "rates": {
        "2001-03-07": {
            "CZK": 34.888
        },
        "2018-10-09": {
            "CZK": 25.805
        },
        "2002-08-15": {
            "CZK": 31.307
        },
        "2011-12-07": {
            "CZK": 25.328
        }
    },
    "start_at": "1999-01-01",
    "base": "EUR",
    "end_at": "2020-05-21"
}

谁能给我解释一下:"2001-03-07": {"CZK": 34.888} 是什么意思?我知道"2001-03-07" 是一个键,但我不确定{"CZK": 34.888},我知道它是另一个对象,它只是"2001-03-07" 键的一个值。这是正确的吗?

如果是这样,我该如何排序?

我想按以下顺序获取数据:

    "rates": {
        "2001-03-07": {
            "CZK": 34.888
        },
        "2002-08-15": {
            "CZK": 31.307
        },
        "2011-12-07": {
            "CZK": 25.328
        },
        "2018-10-09": {
            "CZK": 25.805
        }
    }

我发现了很多关于如何按值排序的信息,而很少有关于按键排序的信息,但对我来说没有什么真正有用的,这甚至可能吗?如果是这样,怎么可能做到这一点?

这是我当前的代码:

const http = require('https');

var options = {
  host: 'api.exchangeratesapi.io',
  path: '/history?start_at=1999-01-01&end_at=2020-05-21&base=EUR&symbols=CZK'
};

callback = function(response) {
  var str = '';
  var fullData = '';
  var filteredData = [];

  response.on('data', function (chunk) {
    str += chunk;
  });

  response.on('end', function () {
    fullData = JSON.parse(str);
    filteredData.push(fullData.rates);

    function custom_sort(a, b) {
        return new Date(a.rates).getTime() - new Date(b.rates).getTime();
    }

    let testing = filteredData.sort(custom_sort);

    console.log(testing);

  });
}

http.request(options, callback).end();

谢谢

【问题讨论】:

  • JSON 是一种文本格式,如 CSV 或 XML,因此除非您尝试处理纯文本,否则您实际上是在询问如何对数组进行排序,或者在这种情况下,尝试对对象。
  • 这能回答你的问题吗? Sort JavaScript object by key
  • 嗨@HereticMonkey,非常感谢您的评论。我知道 JSON 是一种文本格式。我只是不太确定 "something" : { "something": 12345 } 是什么。从你的回答我知道它是一个 JSON 对象,它是另一个 json 对象中另一个键的值,对吗?
  • 不涉及 JSON。只是一个具有对象值的属性的对象。
  • 我明白了,抱歉我在这里错误地使用了 JSON,如果你可以这样称呼它,我的意思是 JSON 结构。但是,是的,我现在明白了。谢谢!

标签: javascript node.js json sorting


【解决方案1】:

您可以将您的 OBJECT 转移到一个结构略有不同的数组中,但按如下所示按 ARRAY 排序。您将获得稍微不同的数据格式(假设date 绝不是您的子对象中的键)。您很幸运,您的日期键格式方便,无需自定义比较逻辑即可轻松排序。

样本输出为数组:

rates = [
  {
    "date": "2001-03-07",
    "CZK": 34.888
  },
  {
    "date": "2002-08-15",
    "CZK": 31.307
  },
  {
    "date": "2011-12-07",
    "CZK": 25.328
  },
  {
    "date": "2018-10-09",
    "CZK": 25.805
  }
]

const input = {
    "rates": {
        "2001-03-07": {
            "CZK": 34.888
        },
        "2018-10-09": {
            "CZK": 25.805
        },
        "2002-08-15": {
            "CZK": 31.307
        },
        "2011-12-07": {
            "CZK": 25.328
        }
    },
    "start_at": "1999-01-01",
    "base": "EUR",
    "end_at": "2020-05-21"
};

const rates = Object.keys(input.rates).sort().map(
  date => ({date, ...input.rates[date]})
);

console.log(rates);

【讨论】:

  • 效果很好,我将不得不花一些时间对此进行试验以完全掌握这个想法。非常感谢。
猜你喜欢
  • 2021-06-07
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 2015-05-08
  • 2014-11-25
相关资源
最近更新 更多