【发布时间】:2015-06-29 15:52:25
【问题描述】:
另一个问题:P,我正在尝试更改 JSON 数组的输出,但我不知道为什么它不会呈现其他文件。
在下面编辑更好的解释。
抱歉,如果您查看我的要点中的代码,我不是很清楚,data[name] = { 会将所有返回名称呈现到单独的 json 文件中,但是如果我删除 [name] 及其只是 data = { 不会渲染单个文件,并且 all.json 文件是由渲染的 [name] 文件组成的。 希望这能更好地解释它。 您给我的代码将“markets” [] 添加到 all.json 文件中,但没有其他文件 all.json 只有一个返回。 我想从 data[name] = 中删除 [name] 的原因是它将名称添加到每个返回的字符串的开头,例如 { "Bitcoin": {"position": "1", "name" :"Bitcoin",},{"Litecoin": {"position":"2", "name": "Litecoin", } 等等。
所以我想我想要做的是将 [name] 从数据 [name] = 进入 fs.writeFile 函数,只在字符串的开头添加“markets”:仍然能够将单个文件渲染到 all.json 中。
不会呈现单个文件的 Node.js 代码。
这个版本的 all.json 只返回
{"position":"650","name":"Pennies","symbol":"CENT","icon":"pennies.png","market_cap":{"usd":"NaN","btc":"?"},"price":{"usd":"2.26018e-9","btc":"9.05947e-12"},"supply":"","volume":{"usd":"43.9142","btc":"0.176021"},"change1h":"0.05","change24h":"3.77","change1d":"-7.07","timestamp":1435559515.397}
在json文件夹中
http://s21.postimg.org/xm7v01ujr/image.jpg
我想要的是 JSON 格式:
{
"markets": [
{
"position": "1",
"name": "Bitcoin",
"symbol": "BTC",
"icon": "bitcoin.png",
"market_cap": {
"usd": "3504403422",
"btc": "14319000.0"
},
"price": {
"usd": "244.738",
"btc": "1.0"
},
"supply": "14319000",
"volume": {
"usd": "13563600",
"btc": "55523.8"
},
"change1h": "0.26",
"change24h": "1.05",
"change1d": "1.21",
"timestamp": 1435401749.236
},
{
"position": "2",
"name": "Litecoin",
and so on.......
}
]
}
#!/usr/bin/nodejs
var request = require("request"),
cheerio = require("cheerio"),
fs = require("fs");
var currencies = ["usd", "btc"];
var currencyExchangeRates = Array();
var data = {};
request('http://coinmarketcap.com/all/views/all/', function (error, response, body) {
if (!error && response.statusCode == 200) {
$ = cheerio.load(body);
currencyExchangeRates = $("#currency-exchange-rates").data();
$("tr").each(function (i) {
if (i > 0) {
var td = $(this).find("td");
var position = td.eq(0).text().trim();
var icon = $(this).find("img.currency-logo").attr("src").replace("/static/img/coins/16x16/", "");
var name = td.eq(1).text().replace("/", "").trim();
var re = /\s([a-z]|[0-9])+\s/i;
var supplyText = td.eq(5).text();
var symbol = td.eq(2).text().trim();
var marketCap = currencyDictionary(td.eq(3));
var price = currencyDictionary(td.eq(4).find("a").eq(0));
var supply = td.eq(5).text().replace(/\D/g, "").trim(); // Replace all non digit characters with nothing
var volume = currencyDictionary(td.eq(6).find("a").eq(0));
var change1h = td.eq(7).text().replace("%", "").trim();
var change24h = td.eq(8).text().replace("%", "").trim();
var change1d = td.eq(9).text().replace("%", "").trim();
var timestamp = Date.now() / 1000;
data = [{
"position": position,
"name": name,
"symbol": symbol,
"icon": icon,
"market_cap": marketCap,
"price": price,
"supply": supply,
"volume": volume,
"change1h": change1h,
"change24h": change24h,
"change1d": change1d,
"timestamp": timestamp
}];
}
});
writeData();
}
});
function currencyDictionary(item) {
var resultArray = {};
currencies.forEach(function(currency) {
if (currency == "btc") {
var result = item.data("btc");
}
else {
var result = item.data("usd") / currencyExchangeRates[currency];
}
resultArray[currency] = result.toString().replace(/,/g,"");
});
return resultArray;
}
function writeData() {
dataDir = "/var/www/coinmarketcap/json/";
callback = function(error) {
if (error) {
console.log(error);
}
};
for (currency in data) {
info = data[currency];
fileName = dataDir + info["symbol"] + ".json";
fs.writeFile(fileName, JSON.stringify(info), callback);
}
fs.writeFile(dataDir + "all.json", JSON.stringify(data), callback);
}
此版本将渲染所有文件,但将 [name] 添加到 all.json
这个版本的json文件夹
http://s16.postimg.org/xicupqi85/image.jpg
JSON 格式为:
{
"Bitcoin":
{
"position": "1",
"name": "Bitcoin",
"symbol": "BTC",
"icon": "bitcoin.png",
"market_cap": {
"usd": "3504403422",
"btc": "14319000.0"
},
"price": {
"usd": "244.738",
"btc": "1.0"
},
"supply": "14319000",
"volume": {
"usd": "13563600",
"btc": "55523.8"
},
"change1h": "0.26",
"change24h": "1.05",
"change1d": "1.21",
"timestamp": 1435401749.236
},
{
"Litecoin":
{
"position" "2",
"name": "Bitcoin",
and so on...
}
}
#!/usr/bin/nodejs
var request = require("request"),
cheerio = require("cheerio"),
fs = require("fs");
var currencies = ["usd", "btc"];
var currencyExchangeRates = Array();
var data = {};
request('http://coinmarketcap.com/all/views/all/', function (error, response, body) {
if (!error && response.statusCode == 200) {
$ = cheerio.load(body);
currencyExchangeRates = $("#currency-exchange-rates").data();
$("tr").each(function (i) {
if (i > 0) {
var td = $(this).find("td");
var position = td.eq(0).text().trim();
var icon = $(this).find("img.currency-logo").attr("src").replace("/static/img/coins/16x16/", "");
var name = td.eq(1).text().replace("/", "").trim();
var re = /\s([a-z]|[0-9])+\s/i;
var supplyText = td.eq(5).text();
var symbol = td.eq(2).text().trim();
var marketCap = currencyDictionary(td.eq(3));
var price = currencyDictionary(td.eq(4).find("a").eq(0));
var supply = td.eq(5).text().replace(/\D/g, "").trim(); // Replace all non digit characters with nothing
var volume = currencyDictionary(td.eq(6).find("a").eq(0));
var change1h = td.eq(7).text().replace("%", "").trim();
var change24h = td.eq(8).text().replace("%", "").trim();
var change1d = td.eq(9).text().replace("%", "").trim();
var timestamp = Date.now() / 1000;
data[name] = {
"position": position,
"name": name,
"symbol": symbol,
"icon": icon,
"market_cap": marketCap,
"price": price,
"supply": supply,
"volume": volume,
"change1h": change1h,
"change24h": change24h,
"change1d": change1d,
"timestamp": timestamp
};
}
});
writeData();
}
});
function currencyDictionary(item) {
var resultArray = {};
currencies.forEach(function(currency) {
if (currency == "btc") {
var result = item.data("btc");
}
else {
var result = item.data("usd") / currencyExchangeRates[currency];
}
resultArray[currency] = result.toString().replace(/,/g,"");
});
return resultArray;
}
function writeData() {
dataDir = "/var/www/coinmarketcap/json/";
callback = function(error) {
if (error) {
console.log(error);
}
};
for (currency in data) {
info = data[currency];
fileName = dataDir + info["symbol"] + ".json";
fs.writeFile(fileName, JSON.stringify(info), callback);
}
fs.writeFile(dataDir + "all.json", JSON.stringify(data), callback);
}
【问题讨论】:
标签: javascript arrays json node.js