如何使用新的Date()解析JSON字符串并在对象中获取Date属性?

时间:2014-02-07 20:10:51

标签: javascript json node.js

有谁知道如何在解析后获得具有实际MyDate对象的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)

3 个答案:

答案 0 :(得分: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' }

答案 1 :(得分:0)

就这样做

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

答案 2 :(得分:0)

正如维基百科所说,JSON支持一些JavaScript本机数据类型,而另一些则不支持:

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

所以我不能以我想要的方式做我想做的事,但这并不重要。我可以使用字符串,然后在某处格式化它。

感谢您的帮助!