循环通过对象的JSON对象

时间:2014-03-12 23:18:59

标签: javascript json node.js

我正在访问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?

对它们进行调整

1 个答案:

答案 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"]

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执行相同操作。我希望我们能很好地解开这个结构。