我这里有一段代码:
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
如果我收到价格,它会在控制台中显示未定义。为什么?
答案 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]);
}
更新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;
});
如果您希望将结构保持为数组数组,则只需将不同的值传递给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]);
}