[英]How to use JSON data in Node.js?
我有一个名为ETHBTC.json
的文件:
[{
"open": "0.06252000",
"high": "0.06264700",
"low": "0.06239800",
"close": "0.06254100",
"volume": "681.69300000",
"timestamp": 1521575400000
},
{
"open": "0.06253500",
"high": "0.06270000",
"low": "0.06242800",
"close": "0.06261900",
"volume": "371.99900000",
"timestamp": 1521575700000
},
{
"open": "0.06261500",
"high": "0.06280000",
"low": "0.06257500",
"close": "0.06266200",
"volume": "519.11000000",
"timestamp": 1521576000000
},
...
]
我试图将low
保存到Node.js中的变量中,以便可以将所有低值加在一起,等等:
for(item in words) {
var lowTotal = 0;
lowTotal += words.low;
}
但是我没有运气。
我也遇到了console.log
问题,只是为了记录low
变量。
首先,您需要解析JSON文件:
let fs = require('fs');
let content = fs.readFileSync('PathToFile').toString();
然后,您需要解析它:
let jsonData = JSON.parse(content);
然后遍历元素。 我推荐for ... of循环
let total = 0;
for(let element of jsonData){
total += element.low
}
您也可以使用Array.prototype.map
或Array.prototype.reduce
但首先要坚持基础。
另外,请确保使用正确的类型:
您在JSON中的数字将另存为字符串。 您还必须转换它们:
let total = 0;
for(let element of jsonData){
total += parseFloat(element.low);
}
请使用如下所示的Object.values。 使用'JSON.Parse'方法将JSON转换为对象
let sum = 0;
Object.values(YOURJSONOBJECT).forEach(element => {
sum += parseFloat(element["low"]);
});
console.log(sum);
结果将是“ 0.18740099999999998”,即“低”属性的总和
只需遍历对象并求和即可
var data = [{ "open": "0.06252000", "high": "0.06264700", "low": "0.06239800", "close": "0.06254100", "volume": "681.69300000", "timestamp": 1521575400000 }, { "open": "0.06253500", "high": "0.06270000", "low": "0.06242800", "close": "0.06261900", "volume": "371.99900000", "timestamp": 1521575700000 }, { "open": "0.06261500", "high": "0.06280000", "low": "0.06257500", "close": "0.06266200", "volume": "519.11000000", "timestamp": 1521576000000 }] var lowTotal = 0; data.map(a=>lowTotal+=+a.low) console.log(lowTotal)
您可以减少以给出数组中每个项目的初始值和增量
const json = JSON.parse('...');
const lowTotal = json.reduce((val, item) => val += parseFloat(item.low), 0);
例
const data = `[{ "open": "0.06252000", "high": "0.06264700", "low": "0.06239800", "close": "0.06254100", "volume": "681.69300000", "timestamp": 1521575400000 }, { "open": "0.06253500", "high": "0.06270000", "low": "0.06242800", "close": "0.06261900", "volume": "371.99900000", "timestamp": 1521575700000 }, { "open": "0.06261500", "high": "0.06280000", "low": "0.06257500", "close": "0.06266200", "volume": "519.11000000", "timestamp": 1521576000000 }]`; const json = JSON.parse(data); const lowTotal = json.reduce((val, item) => val += parseFloat(item.low), 0); console.log(`Total low=${lowTotal}`);
我不确定您是否无法读取json文件,但是代码中存在错误
var lowTotal = 0;
应该在循环之外。
解析String JSON对象以浮动
阅读item
而不是words
var lowTotal = 0;
for(item in words){
lowTotal += parseFloat(item.low);
}
您的代码中有几个问题:
var lowTotal = 0;
里面for
这是不正确 for
循环,以便获得数组的每个项目,而不是像for(item in words)
那样获得数组的索引 low
是string
类型的值,因此将其转换为float
类型并相加即可得到总和。 var words = [{ "open": "0.06252000", "high": "0.06264700", "low": "0.06239800", "close": "0.06254100", "volume": "681.69300000", "timestamp": 1521575400000 }, { "open": "0.06253500", "high": "0.06270000", "low": "0.06242800", "close": "0.06261900", "volume": "371.99900000", "timestamp": 1521575700000 }, { "open": "0.06261500", "high": "0.06280000", "low": "0.06257500", "close": "0.06266200", "volume": "519.11000000", "timestamp": 1521576000000 }]; var lowTotal = 0; words.forEach(function(word){ lowTotal += parseFloat(word.low); }); console.log(lowTotal)
您应该修复一下代码:
let lowTotal = 0;
for(item in words){
lowTotal += item.low;
}
或者,您可以通过其他方式来做到这一点:
let lowTotal = 0;
words.forEach(word => lowTotal += word.low);
或最优雅的方式:
let lowTotal = words.reduce((a, b) => {
if(isNaN(a)) { a = a.low; }
return a + b.low;
}
For..in用于迭代对象的属性。 有很多方法可以循环抛出对象数组,最简单的方法是使用for 。 最后一点,应该在循环外声明lowTotal
变量:
var words= [{ "open": "0.06252000", "high": "0.06264700", "low": "0.06239800", "close": "0.06254100", "volume": "681.69300000", "timestamp": 1521575400000 }, { "open": "0.06253500", "high": "0.06270000", "low": "0.06242800", "close": "0.06261900", "volume": "371.99900000", "timestamp": 1521575700000 }, { "open": "0.06261500", "high": "0.06280000", "low": "0.06257500", "close": "0.06266200", "volume": "519.11000000", "timestamp": 1521576000000 }]; var lowTotal = 0; for(var i=0; i<words.length; i++){ lowTotal += parseFloat(words[i].low); } console.log(lowTotal);
如其他建议。 但是将报价数据括起来以创建一个数组。
另一个建议。
var tickers = require('./JSONFILE.json')
for (const value of Object.values(tickers)) {
console.log(value.low)
}
因为您可能不想汇总所有低值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.