我正在访问cryptsy.com API并返回嵌套在彼此之间的JSON对象,但我不明白如何超越第一级。我使用的API方法是http://pubapi.cryptsy.com/api.php?method=marketdatav2
我的代码是
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]);
};
没有输出。
基本上,我想在最近的交易,卖方,买方或对象内的任何对象中解析对象。并能够将它们分配给变量,或者使用node.js?
对它们进行调整答案 0 :(得分: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"]
recenttrades
是markets
个孩子的孩子,ADT/XPM
,ASC/XPM
,COL/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
}
}
对sellorders
和buyorders
执行相同操作。我希望我们能很好地解开这个结构。