2014-03-12 236 views
0

我訪問cryptsy.com API並返回嵌套在eachother中的JSON對象,但我不明白如何超越第一級。我使用的API方法是http://pubapi.cryptsy.com/api.php?method=marketdatav2通過對象的JSON對象循環

而且我的代碼是

var http = require('http') 

http.request({ 
    host: 'pubapi.cryptsy.com', 
    path:'/api.php?method=marketdatav2' 
}, 
    function (res) { 
    var body =''; 
    res.setEncoding('utf8'); 
    res.on('data', function (chunk) { 
     body += chunk; 
    }); 
    res.on('end', function() { 
     var obj = JSON.parse(body); 

     for(var i in obj) { 
      console.log(obj[i]); 
     }; 
    }); 
}).end() 

而輸出

localhost:Alts praeconium$ node cryptsy1.js 
1 
{ markets: 
    { 'ADT/XPM': 
    { marketid: '113', 
     label: 'ADT/XPM', 
     lasttradeprice: '0.00000316', 
     volume: '49270184.97861321', 
     lasttradetime: '2014-03-12 18:24:40', 
     primaryname: 'AndroidsTokensV2', 
     primarycode: 'ADT', 
     secondaryname: 'PrimeCoin', 
     secondarycode: 'XPM', 
     recenttrades: [Object], 
     sellorders: [Object], 
     buyorders: [Object] 
    }, 
    'ASC/XPM': 
    { marketid: '112', 
     label: 'ASC/XPM', 
     lasttradeprice: '0.00013982', 
     volume: '485160.57447084', 
     lasttradetime: '2014-03-12 18:29:07', 
     primaryname: 'AsicCoin', 
     primarycode: 'ASC', 
     secondaryname: 'PrimeCoin', 
     secondarycode: 'XPM', 
     recenttrades: [Object], 
     sellorders: [Object], 
     buyorders: [Object] }, 

我也試過輸出功能

for(var i in obj.recenttrades) { 
    console.log(obj.recenttrades[i]); 
}; 

沒有輸出的變化。

基本上,我想分析近期交易,sellorder,buyorders ..或對象內的任何對象內的對象。並且能夠將它們分配給一個變量,或者將它們與node.js配合使用?

回答

1

短篇小說

您有一個包含對象的數組 - 因此,工作語法應該是

for(var i in obj.recenttrades[0]) { 
    console.log(obj.recenttrades[0][i]); 
}; 

說來話長

在您所提供的JSON,recenttrades包含具有此語法的對象數組:

{ 
    "id":"29999679", 
    "time":"2014-03-12 18:15:36", 
    "price":"0.00001669", 
    "quantity":"2.16106820", 
    "total":"0.00003607" 
} 

如果你得到TypeError: Cannot read property '0' of undefined然後迭代錯了對象:嘗試迭代即

obj["return"]["markets"]["ADT\/XPM"]["recenttrades"] 

recenttradesmarkets孩子的,這是ADT/XPMASC/XPMCOL/XPM等你的情況解析循環將孩子的:

var markets = obj["return"]["markets"]; 
for(var i in markets) { 
    for(var j in markets[i]["recenttrades"]) { 
    // iterate the markets[i]["recenttrades"][j] object, see thestructure above 
    } 
} 

做同樣的sellordersbuyorders。我希望我們很好地解除了結構。

+0

我得到錯誤(var我在obj.recenttrades [0]){ ^ TypeError:無法讀取屬性'0'undefined – Velletti

+0

然後看看我編輯答案的長故事。 –

+0

哇這真的很重要!非常感謝。 – Velletti