理想是火,点燃熄灭的灯。
需求:我们之前通过接口爬虫 爬取一些数据,
这些数据都是Json格式的,为了方便我们的甲方使用
所以需要把这些数据转为csv 方便他们使用(例如在表单里面搜索,超链接跳转等等)
直接上代码吧:
在转换之前 我们需要对爬取的源数据进行一次过滤
用到我们的node的fs独写文件模块工具
const fs = require("fs"); const data = require("./cjdropshipping/data1.json"); //过滤一下 let newData = data.users.map((item) => { return { pk: item.pk, username: item.username, full_name: item.full_name, is_private: item.is_private, source_Url: `https://www.instagram.com/${item.username}`, }; }); // console.log(newData); // 过滤好用 重新写入一个新的文件中 fs.writeFile( "./cjdropshipping/data1_ed.json", JSON.stringify(newData), (err) => { if (err) console.log("写文件操作失败"); else console.log("写文件操作成功"); } );
通过上面的操作,我们的数据已经做好转成csv的准备了
下面是我们转json转csv的代码:
代码有点多,下面的方法是直接从别人封装好的拿过来的
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <h1>jsonToCsv</h1> <hr /> <button id="btn">json To csv</button> </body> <script> document.querySelector("#btn").onclick = () => { fetch("cjdropshipping/data1_ed.json") .then((res) => { return res.json(); }) .then((csvJson) => { console.log(csvJson); var downName = "IG_cjdropshipping_followings"; var title = [ "pk", "username", "full_name", "is_private", "source_Url", ]; //csv表头 var key = ["pk", "username", "full_name", "is_private", "source_Url"]; // 数据key clickDownload(csvJson, downName, title, key); }); }; //csv下载文件名,用户拼接 //csv下载 function clickDownload(csvJson, downloadName, title, key) { JSonToCSV.setDataConver({ data: csvJson, fileName: downloadName, columns: { title, //csv表头 key, // 过滤 n = key v = value formatter: function (n, v) { if (n === "xxxxx") { return Number(v).toFixed(2); } if (v === undefined) { return " "; } }, }, }); } //csv下载 (function (global, factory) { "use strict"; if (typeof module === "object" && typeof module.exports === "object") { module.exports = global.document ? factory(global, true) : function (w) { return factory(w); }; } else { factory(global); } })(window, function () { var JSonToCSV = { /* * obj是一个对象,其中包含有: * ## data 是导出的具体数据 * ## fileName 是导出时保存的文件名称 是string格式 * ## showLabel 表示是否显示表头 默认显示 是布尔格式 * ## columns 是表头对象,且title和key必须一一对应,包含有 title:[], // 表头展示的文字 key:[], // 获取数据的Key formatter: function() // 自定义设置当前数据的 传入(key, value) */ setDataConver: function (obj) { var bw = this.browser(); if (bw["ie"] < 9) return; // IE9以下的 var data = obj["data"], ShowLabel = typeof obj["showLabel"] === "undefined" ? true : obj["showLabel"], fileName = (obj["fileName"] || "UserExport") + ".csv", columns = obj["columns"] || { title: [], key: [], formatter: undefined, }; var ShowLabel = typeof ShowLabel === "undefined" ? true : ShowLabel; var row = "", CSV = "", key; // 如果要现实表头文字 if (ShowLabel) { // 如果有传入自定义的表头文字 if (columns.title.length) { columns.title.map(function (n) { row += n + ","; }); } else { // 如果没有,就直接取数据第一条的对象的属性 for (key in data[0]) row += key + ","; } row = row.slice(0, -1); // 删除最后一个,号,即a,b, => a,b CSV += row + "\r\n"; // 添加换行符号 } // 具体的数据处理 data.map(function (n) { row = ""; // 如果存在自定义key值 if (columns.key.length) { columns.key.map(function (m) { row += '"' + (typeof columns.formatter === "function" ? columns.formatter(m, n[m]) || n[m] : n[m]) + '",'; }); } else { for (key in n) { row += '"' + (typeof columns.formatter === "function" ? columns.formatter(key, n[key]) || n[key] : n[key]) + '",'; } } row.slice(0, row.length - 1); // 删除最后一个, CSV += row + "\r\n"; // 添加换行符号 }); if (!CSV) return; this.SaveAs(fileName, CSV); }, SaveAs: function (fileName, csvData) { var bw = this.browser(); if (!bw["edge"] && !bw["ie"]) { var alink = document.createElement("a"); alink.id = "linkDwnldLink"; alink.href = this.getDownloadUrl(csvData); document.body.appendChild(alink); var linkDom = document.getElementById("linkDwnldLink"); linkDom.setAttribute("download", fileName); linkDom.click(); document.body.removeChild(linkDom); } else if (bw["ie"] >= 10 || bw["edge"] == "edge") { var _utf = "\uFEFF"; var _csvData = new Blob([_utf + csvData], { type: "text/csv", }); window.navigator.msSaveBlob(_csvData, fileName); } else { var oWin = window.top.open("about:blank", "_blank"); oWin.document.write("sep=,\r\n" + csvData); oWin.document.close(); oWin.document.execCommand("SaveAs", true, fileName); oWin.close(); } }, getDownloadUrl: function (csvData) { var _utf = "\uFEFF"; // 为了使Excel以utf-8的编码模式,同时也是解决中文乱码的问题 if (window.Blob && window.URL && window.URL.createObjectURL) { var csvData = new Blob([_utf + csvData], { type: "text/csv", }); return URL.createObjectURL(csvData); } // return 'data:attachment/csv;charset=utf-8,' + _utf + encodeURIComponent(csvData); }, browser: function () { var Sys = {}; var ua = navigator.userAgent.toLowerCase(); var s; (s = ua.indexOf("edge") !== -1 ? (Sys.edge = "edge") : ua.match(/rv:([\d.]+)\) like gecko/)) ? (Sys.ie = s[1]) : (s = ua.match(/msie ([\d.]+)/)) ? (Sys.ie = s[1]) : (s = ua.match(/firefox\/([\d.]+)/)) ? (Sys.firefox = s[1]) : (s = ua.match(/chrome\/([\d.]+)/)) ? (Sys.chrome = s[1]) : (s = ua.match(/opera.([\d.]+)/)) ? (Sys.opera = s[1]) : (s = ua.match(/version\/([\d.]+).*safari/)) ? (Sys.safari = s[1]) : 0; return Sys; }, }; window.JSonToCSV = JSonToCSV; }); </script> </html>
以上,记录一下
参考文档:https://blog.csdn.net/qq_39706128/article/details/80002366
作者: Bill 本文地址: http://biaoblog.cn/info?id=1630907155309
版权声明: 本文为原创文章,版权归 biaoblog 个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!
上一篇:React SSR的探索学习
下一篇:程序员日记