首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在d3/observablehq中解析JSON中的日期

在d3/observablehq中解析JSON中的日期
EN

Stack Overflow用户
提问于 2021-05-07 19:21:53
回答 1查看 49关注 0票数 0

我有一个包含ISO8601日期的JSON文件:

代码语言:javascript
复制
[
 {
  started_at: "2021-05-06T21:13:03.620Z",
  ...
 },
 ...
]

要使用这些日期值,需要对它们进行解析,但是最简单的方法是什么呢?现在,我已经将JSON附加到可观察的notebook并加载它:

代码语言:javascript
复制
all_jobs = FileAttachment("pipeline.json").json()

然后遍历数组以修复类型:

代码语言:javascript
复制
{
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;
}

但这显然是可怕的。一定有更好的解决方案,它是什么?

EN

回答 1

Stack Overflow用户

发布于 2021-05-07 19:38:58

您可以遍历对象并将ISO时间戳替换为Date对象,如下所示:

代码语言:javascript
复制
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())

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67434049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档