业务场景
临时给一个项目做多语言的工作,其实多语言主要是利用不同的语言json文件,代码中放置的是变量。当中文时就去中文语言json包中拿对应的变量。英文则是去英文包读对应变量的值。而我变态的领导让我交付excel文件,wtf,我问能不能交付json包,竟然说不可以。机智的我肯定不会屈服,于是花了一小时写了一个node脚本来实现
我是没有学过node的,因为我还是个练习6个半月的前端练习生,于是我找到了如下资料
廖雪峰,node入门教程
json转excel
开干~
先搭建起环境
目前已知需要利用npm包json2xls,需要node的fs文件读取功能
所以不难知道,我需要使用npm来创建一个可引入依赖的环境,使用node来运行我的js脚本文件
1,创建一个文件夹叫jtoe(json to excel)
2,npm init (生成package.json)
3,npm install json2xls -D
4,新建一个js文件jtoe.js
5,jtoe.js代码如下
const fs = require('fs')
const json2xls = require('json2xls');
fs.readFile('zh-CN.json','utf8',(err,zh)=>{
if (err) throw err;
fs.readFile('en.json','utf8',(err,en)=>{
if (err) throw err;
const jsonz = JSON.parse(zh);
const jsone = JSON.parse(en);
const jsonArray = [];
getAllJson(jsonz,jsone,jsonArray)
let xls = json2xls(jsonArray);
fs.writeFileSync('name.xlsx', xls, 'binary');
})
})
function getAllJson(jsonz,jsone,jsonArray, name, sign) {
if(name == "" || name == undefined) {
name = "json"
}
for(key in jsonz) {
var k = name + sign + key;
if(!(jsonz[key] instanceof Object)){
jsonArray.push({
zh: jsonz[key],
en: jsone[key]
})
}else{
getAllJson(jsonz[key],jsone[key],jsonArray, k, sign);
}
}
};
5,运行js脚本: 命令行中运行node jtoe.js
函数getAllJson,使用来递归解析json文件的。因为我定义的语言包是分类了 ,按钮一组,label一组。所以层级不定。需要把所有层级遍历出来。
使用npm包的demo会发现,json转excel的规则。每一行是json数组中的一个元素。json数组中的元素对象里面key值相同在一列。
看图会明白~
json文件内容 && 导出的excel文件