我有一个包含ISO8601日期的JSON文件:
[
{
started_at: "2021-05-06T21:13:03.620Z",
...
},
...
]要使用这些日期值,需要对它们进行解析,但是最简单的方法是什么呢?现在,我已经将JSON附加到可观察的notebook并加载它:
all_jobs = FileAttachment("pipeline.json").json()然后遍历数组以修复类型:
{
for (let i = 0; i < all_jobs.length; i++) {
if (all_jobs[i].started_at)
all_jobs[i].started_at = new Date(all_jobs[i].started_at);
if (all_jobs[i].finished_at)
all_jobs[i].finished_at = new Date(all_jobs[i].finished_at);
}
return all_jobs;
}但这显然是可怕的。一定有更好的解决方案,它是什么?
发布于 2021-05-07 19:38:58
您可以遍历对象并将ISO时间戳替换为Date对象,如下所示:
function isISODate(s) {
return /(\d{4})-(\d{2})-(\d{2})T(\d{2})\:(\d{2})\:(\d{2})(\.\d{3})?(Z|([+-]\d{2})\:(\d{2}))/.test(s)
}
function replaceDates(obj) {
for (const key in (obj)) {
if (typeof obj[key] == "object") {
replaceDates(obj[key]);
} else {
obj[key] = isISODate(obj[key]) ? new Date(obj[key]): obj[key];
}
}
}
let obj = [{ foo: { a: 42, bar: '2021-05-07T09:28:48Z' }}];
console.log("Original:", obj)
replaceDates(obj);
console.log("Modified:", obj)
console.log("Modified date:", obj[0].foo.bar.toString())
https://stackoverflow.com/questions/67434049
复制相似问题