没有返回有效的JSON?

所以,我使用node.js并尝试使用node-mysql创build一个简单的快速REST API,expression(当然)等等。

我几乎没有问题直到现在,每当我执行一个数据库查询,它返回的结果是这样的:

[ { id: 18, username: 'test', passwordHash: 'redacted', admin: 0, created: Fri Jun 13 2014 17:17:10 GMT-0700 (Pacific Daylight Time) } ] 

当使用JSON.parse时,返回一个SyntaxError: Unexpected Token o 。 我已经看着JSONvalidation器,这表明这是无效的JSON。 我在这里错过了什么,它似乎是JSON。 我对JavaScript有点新意,所以如果这很容易就道歉。

不是 JSON。

几乎是有效的JavaScript对象文字符号(之后是JSON被命名),但是即使在那里它也缺less一些东西,比如createdstring周围的引号。

实际上,你已经有了一个JavaScript对象, 把它传递给JSON.parse将把它强制为一个string,它是[object <some type>] ,第一个无效/意外字符是'o' …这就是你的错误信息所说的。

看起来好像你已经混淆了JavaScript脚本中产生一个对象的文字符号和被称为JSON的文本格式之间的混淆,并决定你必须总是“parsing”对象以便使用它们。

所以当你试图parsing一个对象时,你会得到一个错误。 JSON.parse接受一个string并将其parsing为一个对象。 你已经有一个对象,你不需要parsing它。

 var obj = {}; JSON.parse(obj) SyntaxError: Unexpected token o 

JSON不是一个JavaScript对象。

现在如果你把你的obj变成stringize,你会得到JSON:

 var obj = [ { id: 18, username: 'test', passwordHash: 'redacted', admin: 0, created: 'Fri Jun 13 2014 17:17:10 GMT-0700 (Pacific Daylight Time)' } ]; JSON.stringify(obj); "[{"id":18,"username":"test","passwordHash":"redacted","admin":0,"created":"Fri Jun 13 2014 17:17:10 GMT-0700 (Pacific Daylight Time)"}]" 

如果你得到一个JavaScript对象,而且看起来像是,那就使用它。 没有必要parsing它。