簡體   English   中英

如何使用新的Date()解析JSON字符串並在對象中獲取Date屬性?

[英]How can I parse JSON string with new Date() and get a Date property in the object?

有人知道解析后如何獲取帶有實際Date對象的MyDate屬性嗎?

var myObject = JSON.parse('{ "MyDate" : new Date ("2013-12-13"), "Test" : "TestString"}');

我有一個包含數千條JSON記錄的文件,並且正在使用NodeJS導入它

var content = require('./content.json');

如果有人知道特殊引號之類的技巧,那將非常棒。

在這兩種情況下,我都會遇到此異常:

SyntaxError: Unexpected token e
    at Object.parse (native)
    at repl:1:6
    at REPLServer.self.eval (repl.js:110:21)
    at repl.js:249:20
    at REPLServer.self.eval (repl.js:122:7)
    at Interface. (repl.js:239:12)
    at Interface.EventEmitter.emit (events.js:95:17)
    at Interface._onLine (readline.js:202:10)
    at Interface._line (readline.js:531:8)
    at Interface._ttyWrite (readline.js:760:14)

我很好奇,JSON是從哪里來的? 沒有表示日期的標准,因此此類擴展可能很有趣。

無論如何,這不是經典的JSON。 有數十種不同的JSON風格,但看起來與我所了解的不一樣。 這並不意味着您的格式不好,而是意味着標准JSON.parse在這里無法使用。

但是,您可以使用YAML解析器對其進行解析,在這種情況下,Date將表示為字符串,以后可以替換。

這是處理這種格式的方法:

var YAML = require('js-yaml')
var object = YAML.safeLoad('{ "MyDate" : new Date ("2013-12-13"), "Test" : "TestString"}')

function parse_dates(v) {
  if (typeof(v) === 'object') {
     for (var i in object) {
        v[i] = parse_dates(v[i])
     }
  } else if (typeof(v) === 'string') {
     var m = v.match(/^new Date\s*\(["'](.*)["']\)$/)
     if (m != null) {
        return new Date(m[1])
     }
  }
  return v
}

console.log(parse_dates(object))

結果:

$ TZ=UTC node test.js 
{ MyDate: Fri Dec 13 2013 00:00:00 GMT+0000 (UTC),
  Test: 'TestString' }

做這個

var myObject = JSON.parse('{ "MyDate" : "'+new Date ("2013-12-13")+'", "Test" : "TestString"}');

如Wikipedia所述,JSON支持某些JavaScript本機數據類型,而其他一些則不支持:

http://en.wikipedia.org/wiki/JSON#Unsupported_native_data_types

因此,我無法以自己想要的方式做我想做的事,但這並不重要。 我可以使用字符串,以后再將其格式化。

謝謝您的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM