2014-03-12 188 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