如何对单层时间序列JSON按日期倒序排序?
按日期键倒序排序JSON时间序列数据
给定如下单层时间序列JSON数据:
{ "2023-06":7.2, "2023-08":6.7, "2023-07":5, "2022-04":3.5, "2023-05":6.1 }
要实现按日期键从最新到最早的倒序排序,得到目标结果:
{ "2023-08":6.7, "2023-07":5, "2023-06":7.2, "2023-05":6.1, "2022-04":3.5 }
可以按照以下步骤操作(以JavaScript为例):
实现步骤
- 解析JSON为JavaScript对象:用
JSON.parse()把JSON字符串转成可操作的JS对象。 - 提取键值对数组:使用
Object.entries()获取对象的键值对数组,每个元素是[日期键, 值]的形式。 - 按日期键倒序排序:利用数组
sort()方法,对日期键进行比较。由于日期格式是YYYY-MM,字符串字典序和日期顺序一致,直接用localeCompare倒序即可;也可以转成Date对象比较,兼容性更严谨。 - 重组为排序后的对象:用
Object.fromEntries()把排序后的键值对数组转回对象(ES6+支持,旧环境可改用循环构建)。 - 转回JSON字符串:最后用
JSON.stringify()输出格式化后的JSON。
完整代码示例
const originalJson = '{ "2023-06":7.2, "2023-08":6.7, "2023-07":5, "2022-04":3.5, "2023-05":6.1 }'; // 解析为JS对象 const data = JSON.parse(originalJson); // 提取键值对并按日期倒序排序 const sortedEntries = Object.entries(data).sort(([aKey], [bKey]) => { // 方法1:利用YYYY-MM字符串的字典序比较 return bKey.localeCompare(aKey); // 方法2:转成Date对象比较(更严谨,适配异常格式场景) // const dateA = new Date(aKey); // const dateB = new Date(bKey); // return dateB - dateA; }); // 重组为排序后的对象 const sortedData = Object.fromEntries(sortedEntries); // 输出格式化后的JSON const sortedJson = JSON.stringify(sortedData, null, 2); console.log(sortedJson);
注意事项
- 现代JavaScript引擎(ES6及以上)会保留对象的插入顺序,
Object.fromEntries()生成的对象能保证排序后的顺序;如果运行环境是ES5及以下,建议使用Map存储排序后的键值对,再手动遍历构建结果,避免顺序丢失。 - 如果日期格式不是
YYYY-MM,需要调整排序时的日期解析逻辑,确保能正确比较日期先后。
内容的提问来源于stack exchange,提问作者crowbar_sk
相关产品推荐
相关产品推荐

