NodeJS |通过JSON循环给出undefined

时间:2017-01-21 21:07:02

标签: javascript node.js

我这里有一段代码:

var obj = JSON.parse(fs.readFileSync('config.json', 'utf8'));

for(var i = 0; i < obj.prices.length; i++){
    console.log(obj[i]);
}

JSON:http://pastebin.com/6ZaVG4Xc

如果我收到价格,它会在控制台中显示未定义。为什么?

3 个答案:

答案 0 :(得分:1)

你不是console.log正确的事。

使用:console.log(obj.prices[i]);

更新

要访问每个单独的值(即日期,价格等),请使用以下内容:

for(var i = 0; i < obj.prices.length; i++){
    console.log('Date', obj.prices[i][0]);
    console.log('Price', obj.prices[i][1]);
    console.log('Amount', obj.prices[i][2]);
}

jsfiddle

更新2:

prices数据构造为对象数组而不是数组数组可能会有所帮助。你可以做任何事情,比如按日期排序,但你可能会发现更容易推理出一系列对象,同时也使它不易出错。

["Jun 02 2015 01: +0",3.931,"27070"]

{ "date": "Jun 02 2015 01: +0", "price": "3.931, "amount": "27070" }

然后,您可以使用自定义排序功能基于日期进行排序:

var sorted_prices = prices.sort(function(a, b){
  a = new Date(a.date),
  b = new Date(b.date);
  return a - b;
});

updated jsfiddle

如果您希望将结构保持为数组数组,则只需将不同的值传递给new Date

a = new Date(a[0]),
b = new Date(b[0]);

作为旁注,在使用这些大型数据集时,正则表达式会派上用场。如果您还不知道正则表达式,我将您的数组数组转换为具有以下正则表达式的对象数组:

查找:\["(.*?)",(.*?),"(.*?)"\] 替换:{"date": "$1", "price": $2, "amount": $3}

要了解有关正则表达式的更多信息,建议您this course

更新

var prices = [
  "May 27 2015": [
    {
      "price": 0.292,
      "amount": 888
    },
    {
      "price": 0.242,
      "amount": 118
    }
  ],
  "May 28 2015": [
    {
      "price": 0.492,
      "amount": 88228
    },
    {
      "price": 0.142,
      "amount": 1118
    }
  ]
]

答案 1 :(得分:0)

尝试更换:

console.log(obj[i]);

使用:

console.log(obj.prices[i]);

答案 2 :(得分:0)

您没有在循环中访问价格数组:

for(var i = 0; i < obj.prices.length; i++){
  console.log(obj.prices[i]);
}