Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何按日期对JSON排序?_Javascript_Node.js_Json_Api - Fatal编程技术网

Javascript 如何按日期对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

我正在尝试循环一个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(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
的位置。