2017-03-03 8 views
1

私はgetリクエストで返されたデータを反復しようとしています。 JSON形式であるかのように繰り返し処理しようとしていますが、これを初めて知っていて、JSON形式で認識しているものが返されているのか、文字列として認識しているのかわかりませんinfo.data.itemsなどのものを認識できるようにします。ここでは、ノード、基本認証を使用して私のget要求です。ノードを反復しようとしましたget rest return

ここでは、取得リクエストから返されるサンプルデータと、実際に反復処理を試みているものを示します。そして、ここで

{"data":{"items":[{"date":"2017-02-02","revenue":111,"impressions":000},{"date":"2017-02-03","revenue":123,"impressions":0000,},"message":"Top 2 rows returned."}

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); 

    }); 
    }); 
} 

は、私がデータを反復処理しようとしている次の機能です。それはあなたのJSONを見てみると、私はエラーを取得し、この機能、

TypeError: Cannot read property 'items' of undefined

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

を試してみて、あなたの問題 – user7417866

+3

はJSONがテキストデータであるものです。プロパティをアクセスできるJSオブジェクトに変換するには、解析する必要があります。 'var rData = JSON.parse(rBody);' –

+1

"がJSON形式で認識されるか、それを文字列として認識している場合" - JSON _is_ a string – qxz

答えて

2

を通過した後、私はあなたが属性にアクセスしたいと思うあなたの質問から、次の問題

{"data":{"items":[{"date":"2017-02-02","revenue":111,"impressions":000},{"date":"2017-02-03","revenue":123,"impressions":0000,},"message":"Top 2 rows returned."} <-- this should probably be a ']' not sure

を見ることができますデータの 次

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." 
    } 
    }); 
} 
+1

私は1-2時間後にそれを解決し、ここに戻って来るのを忘れました。しかし、まさにあなたがここで言及したものでした。次の投稿は、結局何が起こったのか分かりません。 JSON.parse(rData)が必要でした。 – Mike

+0

var rData = rBody; var rDataParsed = JSON.parse(rData); rDataParsed.data.items.forEach(function(item){ var date = item.date; – Mike

+1

ところで、感謝します! – Mike

関連する問題