Javascript 如何按日期对JSON排序?
我正在尝试循环一个JSON并按日期对其排序,这样我就可以看到最新日期到最旧日期,然后将其写入文件 这是我的密码Javascript 如何按日期对JSON排序?,javascript,node.js,json,api,Javascript,Node.js,Json,Api,我正在尝试循环一个JSON并按日期对其排序,这样我就可以看到最新日期到最旧日期,然后将其写入文件 这是我的密码 var reader = JSON.parse(fs.readFileSync('txt.json', 'utf8')); function sortByDate(a, b) { return new Date(a.lastUpdated).toJSON() - new Date(b.lastUpdated).toJSON(); } reader.sort(sortByDat
var reader = JSON.parse(fs.readFileSync('txt.json', 'utf8'));
function sortByDate(a, b) {
return new Date(a.lastUpdated).toJSON() - new Date(b.lastUpdated).toJSON();
}
reader.sort(sortByDate)
JSON数据示例
{
"Data": {
"Contents": [
{
"Key": [
"HelloTest"
],
"lastUpdated": [
"2019-10-25T10:30:50.558Z"
]
},
{
"Key": [
"TestHello"
],
"lastUpdated": [
"2019-03-26T10:30:50.558Z"
]
}
]
}
}
以下是我在您的代码中发现的几个错误:
- 您的函数名有输入错误,它应该是
,而不是sortByDate
sortByDate
- 您需要对内部json.Data.Contents数组进行顶级排序,而不是外部json对象
- 您需要使用
引用lastUpdated[0]
数组的第一个元素lastUpdated
- 最后,您不需要在排序函数中对日期对象调用
,只需转换为日期并返回差值即可toJSON()
键和上次更新的值来说,这似乎很奇怪
如果将字段保留为数组,下面是一个工作示例,显示如何按日期对内部数据进行排序。内容数组:
const jsonString=`{
“数据”:{
“内容”:[{
“键”:[“HelloTest”],
“最新更新”:[“2019-10-25T10:30:50.558Z”]
}, {
“键”:[“TestHello”],
“最新更新”:[“2019-03-26T10:30:50.558Z”]
}]
}
}`;
功能sortByDate(a,b){
返回新日期(a.lastUpdated[0])-新日期(b.lastUpdated[0]);
}
const json=json.parse(jsonString);
const defaultValue={Data:{Contents:[]};
const sortedContents=[…(json | | defaultValue).Data.Contents].sort(sortByDate);
常量输出={…json,数据:{Contents:sortedContents};
控制台日志(输出)代码>看起来您正在从文件中读取内容,然后需要按日期对其排序,最后将其写入新文件。如果这就是你想要的,以下几点应该会有所帮助:
const fs = require('fs');
const path = require('path');
// JSON files can be requied in as objects without parsing
// `arrayOfStuff` will be the var name for `Contents`
const { Data: { Contents: arrayOfStuff } } = require('./data.json');
function sortByDate(el1, el2) {
// access the date from the object and turn into date object
let date1 = new Date(el1.lastUpdated[0]);
let date2 = new Date(el2.lastUpdated[0]);
// compare date objects in revers order to get newest to oldest
return (date2 - date1);
}
// sort `Contents` from the `Data` object and turn into JSON
const sortedContent = arrayOfStuff.sort(sortByDate);
const newDataObj = JSON.stringify({ Data: { Content: sortedContent }}, null, 2);
// create the fully qualified file path with `sortedByDate.json` as the file name
const filePath = path.resolve('./', 'sortedByDate.json');
// write to new file
fs.writeFile(filePath, newDataObj, (err) => {
if(err) {
console.log('Made an oopsie:', err);
}
console.log(`Success!, new JSON file located at: ${filePath}`);
}); // write to file
Key
和lastUpdated
是json中的集合,因此我认为您应该尝试a.lastUpdated[0]
和b.lastUpdated[0]
TypeError:reader.sort不是函数,这是我遇到的错误。您能用最新的代码更新问题吗?太好了!我使用的是一个旧的XML文件,我必须通过生成函数将其转换为JSON,感谢您帮助我理解我现在所犯的错误。比转换为日期更简单的方法是只测试a.lastUpdatedb.lastUpdated?1:0
。没有理由进行所有这些Date
转换。好的,我已经尝试过了,但是我的JSON名为images.JSON,它返回找不到模块。/images.JSON
当文件路径不正确时,通常会收到错误消息。我会从脚本运行的相对文件中仔细检查images.json
的位置。