有谁知道如何在解析后获得具有实际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)
答案 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
所以我不能以我想要的方式做我想做的事,但这并不重要。我可以使用字符串,然后在某处格式化它。
感谢您的帮助!