尝试迭代一个节点得到休息返回

时间:2017-03-03 17:38:29

标签: javascript json

我正在尝试遍历通过get请求返回的数据。我试图迭代它,好像是JSON格式,但我是新手,不知道它是否返回它以JSON格式识别的东西,或者它是否将其识别为字符串,这就是为什么我无法让它识别诸如info.data.items之类的东西。这是我使用节点,基本身份验证的获取请求。

以下是我的get请求返回的示例数据以及我实际尝试迭代的内容。

  

{ “数据”:{ “项”:[{ “日期”: “2017年2月2日”, “收入”:111, “曝光”:000},{ “日期”:“2017-02- 03“,”收入“:123,”展示次数“:0000,},”消息“:”返回前两行。“}

function rData(key, secret, account_id) {

  var https = require('https');

  var options = {

    host: 'api.urlhere.com',
    port: 443,
    path: 'path',

    // authentication headers

    headers: {

      'Authorization': 'Basic ' + new Buffer(key + ':' + secret).toString('base64')

    }
  };
  var request = https.get(options, function(res) {

    var body = "";

    res.on('data', function(data) {

      body += data;

    });

    res.on('end', function() {

      //console.log(body);
      callNextFunction(body);
    })

    res.on('error', function(e) {

      console.log("Got error: " + e.message);

    });
  });
}

然后这是我试图迭代数据的下一个函数。完成此功能后,我收到错误,

  

TypeError:无法读取未定义

的属性'items'
function callNextFunction(rBody) {

  var rData = rBody;

  console.log("Data transfer sucessful: " + rData); // Works up to this point.

  rData.data.items.forEach(function(info) {

    var rev = info.revenue;
    console.log("Revenue: " + rev);
  })
}

1 个答案:

答案 0 :(得分:2)

查看您的JSON我可以看到以下问题

  

{"数据" {"项目":[{"日期":" 2017年2月2日"&#34 ;收入":111,"曝光":000},{"日期":" 2017年2月3日""收入&#34 ; 123"曝光":0000,},"消息":"顶   返回了2行。"}< - 这应该是']'不确定

根据您的问题,我认为您想要访问数据的属性。 请尝试以下

function callNextFunction(rBody) {

  var rData = JSON.parse(rBody);

  console.log("Data transfer sucessful: " + rData); // Works up to this point.
  $.each(rData.data.items, function(i, info) {
    if (info.date) {
       //this info will contain the item with "date" "revenue"...
       var rev = info.revenue;
       console.log("Revenue: " + rev);
    }
    else if (info.message) {
        // this is the information that contains the "message":"Top 2 rows returned."
    }
  });
}