Javascript Can';t使用JSON.parse返回的数据
我正在尝试测试一个api(sails.js),但无法使用JSON.parse返回的数据 我有这个测试:Javascript Can';t使用JSON.parse返回的数据,javascript,json,sails.js,supertest,Javascript,Json,Sails.js,Supertest,我正在尝试测试一个api(sails.js),但无法使用JSON.parse返回的数据 我有这个测试: describe('when requesting resource /coin', function () { it ('should request "/Coin" on server and return it', function (done) { supertest(sails.express.app) .get('/Coin') .expect('Conten
describe('when requesting resource /coin', function () {
it ('should request "/Coin" on server and return it', function (done) {
supertest(sails.express.app)
.get('/Coin')
.expect('Content-Type', /json/)
.expect(200, done)
.end(function(err, res) {
var result = JSON.parse(JSON.stringify(res.text));
assert.equal(result.cash, 1000);
done();
})
})
})
在这里,您可以看到结果的样子:
未捕获类型错误:对象[
{
“用户ID”:“macario”
“现金”:1000
“createdAt”:“2014-03-04T20:17:57.483Z”
“更新日期”:“2014-03-07T02:47:51.098Z”
“身份证”:15
}
][
{
“用户ID”:“macario”
“现金”:1000
“createdAt”:“2014-03-04T20:17:57.483Z”
“更新日期”:“2014-03-07T02:47:51.098Z”
“身份证”:15
}
]
错误是:
未捕获断言错误:“未定义”==1000
我想使用这些信息,但我无法访问它们。您在
res.text
中的响应可能是字符串
当您stringify
字符串时,引号将被转义,从而导致这种情况
""[{\"userId\":\"macario\",\"cash\":1000,\"createdAt\":\"2014-03-
04T20:17:57.483Z\",\"updatedAt\":\"2014-03-07T02:47:51.098Z\",\"id\":15}]""
因此,当您对其调用JSON.parse
时,它只是将其转换回字符串,而不是您想要的对象
只要换一条线
var result = JSON.parse(JSON.stringify(res.text));
对此,
var result = JSON.parse(res.text);
如果
parse
失败,则res.text
中的JSON格式不正确,这是您的主要问题。为什么要这样做var result=JSON.parse(JSON.stringify(res.text))代码>?我不知道。我在遵循一个教程,但它的重点是节点,然后我试图适应一些命令。如果有一种检索和使用数据的简单方法,那就是我所需要的。我从这个开始,它是一个非常简单的api,只是为了学习。是的,我以前已经尝试过这个,但是正如你所说的,问题在于它的格式。给出的错误是:Uncaught SyntaxError:Unexpected token[我认为这是由括号[]引起的]为了包装json,我正在尝试删除它们括号应该很好;它们代表一个数组。但是在你的问题中,我没有看到数组中的第一个元素和第二个元素之间有逗号,这会导致错误。此外,你的测试看起来不太正确——你正在执行一个返回所有硬币的find
请求(因此是数组),但是检查cash
值就好像只需要一个结果一样。要么检查result[0]。cash
,要么将请求更改为/Coin/15
(或其他已知ID),我终于找到了错误。我在返回的json中收到了双引号,我刚刚更改了。expect(200,完成)预期(200)并且成功了:D