-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathjson.js
115 lines (97 loc) · 2.5 KB
/
json.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/env node
const fs = require("fs");
const XLSX = require("xlsx");
const buf = fs.readFileSync(process.argv[2]); // 待处理文件名
const wb = XLSX.read(buf, { type: "buffer" });
const TABLE_NAME = process.argv[3] || 'Sheet';
const KEY_COLUMN_NAME = process.argv[4] || 'A';
const VALUE_COLUMN_NAME = process.argv[5] || 'B';
const EXPORT_FILE_NAME = process.argv[6] ||
process.argv[2]
.split("/")
.pop()
.replace("xlsx", "json"); // 输出文件名
const keys = [];
const values = [];
const data = wb.Sheets[TABLE_NAME];
const oldKeyIsCoveredWith = (nextKey)=>{
const { length } = keys;
for(let i=0; i < length; i++){
if(new RegExp(`^${`${keys[i]}`.split('.').join('\\.')}\\.`).test(nextKey)){
return i
}
}
return 'false'
}
const coveredKeysIndexs = [];
for (const key in data) {
let nextKey;
// key 是覆盖的
if (key.includes(KEY_COLUMN_NAME)) {
// key 所在列
nextKey = data[key].v
}
let coveredKeysIndex = oldKeyIsCoveredWith(nextKey);
if(coveredKeysIndex !== 'false'){
coveredKeysIndexs.push(coveredKeysIndex)
}
if (key.includes(KEY_COLUMN_NAME)) {
// key 所在列
keys.push(nextKey)
}
if (key.includes(VALUE_COLUMN_NAME)) {
//value 所在列
values.push(data[key].v)
}
}
const _keys = [];
const _values = [];
const oldKeysLength = keys.length
for(let i=0; i<oldKeysLength; i++){
if(coveredKeysIndexs.includes(i)){
continue
}
_keys.push(keys[i]);
_values.push(values[i])
}
_keys.shift();
_values.shift();
function translateArraysToJSON(keys, values) {
const MyJSON = {};
let index = 0;
for (const item of keys) {
const currentKeys = `${item}`.split(".");
let currentKey = "";
for (let el of currentKeys) {
currentKey += `["` + el + `"]`;
if (!eval("MyJSON" + currentKey)) {
eval("MyJSON" + currentKey + "={}");
}
}
eval("MyJSON" + currentKey + "=" + "`" + values[index++] + "`");
}
return MyJSON;
}
// 输出文件名
const fileNameArr = EXPORT_FILE_NAME.split(".");
let fileType = "any";
if (fileNameArr.length >= 1) {
fileType = fileNameArr.pop();
}
const fileName = EXPORT_FILE_NAME.replace("_time_", new Date().toLocaleString());
if (fileType === "js") {
fs.writeFileSync(
fileName,
`'use strict';\n\n module.exports = ${JSON.stringify(
translateArraysToJSON(_keys, _values),
null,
2
)}`
);
} else {
fs.writeFileSync(
fileName,
`${JSON.stringify(translateArraysToJSON(_keys, _values), null, 2)}`
);
}
console.log("done");