没有返回有效的JSON?

时间:2014-06-13 18:18:03

标签: javascript json node.js

所以,我使用node.js并尝试创建一个简单的表达REST API,使用node-mysql,express(当然)和其他东西。

我现在几乎没有任何问题,每当我执行db查询时,它都会返回一个结果:

[ { 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。 我查看了JSON验证器,它说明这是无效的JSON。我在这里遗漏了什么,它似乎是JSON。我对JavaScript稍微陌生,所以如果这很容易就道歉。

3 个答案:

答案 0 :(得分:3)

因此,当您尝试解析对象时,您将收到错误。 JSON.parse接受一个字符串并将其解析为一个对象。你已经有了一个对象,你不需要解析它。

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

JSON不是JavaScript对象。

现在,如果你将你的obj字符串化,那么你将获得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)"}]"

答案 1 :(得分:1)

如果您正在获取JavaScript对象,并且看起来是,请使用它。没有必要解析它。

答案 2 :(得分:1)

不是 JSON。

几乎有效的JavaScript对象文字表示法(之后命名为JSON),但即便如此,它也缺少一些内容,例如created周围的引号字符串。

事实上,您似乎已经有了一个JavaScript对象;将其传递给JSON.parse会将其强制转换为字符串[object <some type>],其中第一个无效/意外字符为'o' ...这就是您的错误消息所说的内容。

您似乎对JavaScript脚本中的文字符号(导致对象)和文本格式(称为JSON)感到困惑,并决定您必须始终&#34;解析&#34;对象以便使用它们。