2014-02-07 45 views
1

有沒有人知道如何得到MyDate財產與實際Date對象後解析?如何使用新的Date()解析JSON字符串並在對象中獲取Date屬性?

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) 
+4

這不是有效的json。該錯誤必須在服務器端更正,或者生成該json字符串的任何內容。 Date對象不是由json本地處理的(就像整數,字符串和布爾值一樣),所以也許最簡單的方法是使用1970年1月1日以來的毫秒數,然後將它傳遞給'new Date( )'轉換爲'Date'對象時。 – Matt

+2

將未使用的第二個參數傳遞給JSON.parse,reviver(),該函數將查找日期數據並將其解析爲Date對象。請參閱https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter – dandavis

+0

@dandavis優秀的建議,你應該作爲回答發佈。 –

回答

0

只是這樣做

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

我猜他不能這樣做,因爲字符串來自某處。 –

+0

讓我們來看看他的侷限性。我認爲他正在自己建造這些。 – CodeViking

+0

沒有什麼特別的,我知道,你也可以把它放在 之後myObject.MyDate = new Date(「2013-12-13」); – Dylan

1

我很好奇,這裏是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' } 
相關問題