无法使用JSON.parse返回的数据

时间:2014-03-07 07:20:56

标签: 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('Content-Type', /json/)
    .expect(200, done)
    .end(function(err, res) {
      var result = JSON.parse(JSON.stringify(res.text));
      assert.equal(result.cash, 1000);
      done();
    })
  })
 })

在这里你可以看到结果如何:

  

未捕获的TypeError:对象[

     

{

     

“userId”:“macario”,

     

“现金”:1000,

     

“createdAt”:“2014-03-04T20:17:57.483Z”,

     

“updatedAt”:“2014-03-07T02:47:51.098Z”,

     

“id”:15

     

}

     

] [

     

{

     

“userId”:“macario”,

     

“现金”:1000,

     

“createdAt”:“2014-03-04T20:17:57.483Z”,

     

“updatedAt”:“2014-03-07T02:47:51.098Z”,

     

“id”:15

     

}   ]

错误:

  

未捕获的AssertionError:“undefined”== 1000

我想使用此信息,但我无法访问它们。

1 个答案:

答案 0 :(得分:2)

您在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格式不正确,这是您的主要问题。