簡體   English   中英

如何將json格式從對象轉換為數組

[英]How to convert json formatting from Object to Array

另一個問題: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] 從 data[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([az]|[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([az]|[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); }

嘗試使用for...in循環

 var data = { "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 } }; var res = {"markets":[]}; for (var prop in data) { res.markets.push(data[prop]) }; document.getElementsByTagName("pre")[0].textContent = JSON.stringify(res, null, 4);
 <pre></pre>

解決了,不得不將 all.json 的 fs.writeFile 移出 writeData 函數,並為 all.json 提供自己的函數,該函數在 writeData 函數完成后調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM