【问题标题】:How to parse new Date(...) received in JSON如何解析 JSON 中收到的新 Date(...)
【发布时间】:2018-02-19 10:41:13
【问题描述】:

我从 REST 服务接收到以下 JSON:

{  
    "data":{  
       "virt":false,
       "someValue":"0.0",
       "dateFrom":new Date(1519772400000),
       "anotherValue":""
   }
}

但我不知道如何使用 new Date(1519772400000) 对象解析字段。 JSON.parse()response.json() 不起作用。我需要从收到的 JSON 中创建一个对象。

有没有什么干净的方法可以在不创建新的特殊解析器或只使用正则表达式的情况下解析它?

谢谢。

【问题讨论】:

  • 嗯,这不是 JSON。如果 REST 服务应该返回 JSON,则需要修复 REST 服务。如果它不应该返回 JSON,那么您可能需要以不同的方式处理它。
  • 你使用什么样的后端?
  • 这是一个基于 Grails 框架的大型 REST 服务。 ExtJS 可以自动解析这样的东西。你有什么想法如何处理那种东西吗?不幸的是,我无法改变这一点。
  • 我创建了一个简单的方法,它使用 RegExp const pattern = /new Date\([0-9]*\)/g; 来查找所有出现的 new Date(...)。然后它解析输入,设置日期格式并返回正确格式的 json。我想以更好的方式解决它,但它又快又简单。

标签: javascript json angular typescript


【解决方案1】:

理想情况下,您应该像这样存储和获取 JSON:

{  
    "data":{  
       "virt":false,
       "someValue":"0.0",
       "dateFrom": 1519772400000,
       "anotherValue":""
   }
}

您在问题中发布的任何内容都是无效的 JSON。

【讨论】:

    【解决方案2】:

    实际上,这按预期工作,REST 输出没有任何问题。

    [EDIT] 当然,如果它以 Unixtimestamp 或类似输出的形式出现会更好。[/EDIT]

    这是你解析它的方式:

    let json = {  
        "data":{  
           "virt":false,
           "someValue":"0.0",
           "dateFrom":new Date(1519772400000),
           "anotherValue":""
       }
    }
    
    let date = json.data.dateFrom
    
    console.log(date)
    console.log(Date.parse(date))
    

    JSFiddle

    【讨论】:

    • 除非 JSON 字符串被解析,否则不能像 'json.data.dateFrom' 那样访问它
    • 浏览器自动解析它,在 Chrome、Firefox 和 IE 中尝试和测试
    • 如果您在 AJAX 请求中收到“JSON”作为文本,浏览器如何自动解析它?
    • 做一个json的console.log,你会看到的。
    • 即使你的浏览器或框架自动解析json响应,这种情况下解析也会失败!
    猜你喜欢
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 2015-07-18
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多