京东在移动端的全国城市数据格式:
cb_getprovinceAH({
"2652": ["乌鲁木齐市", {
"2653": ["乌鲁木齐县", {
"36689": "水西沟镇",
"36690": "安宁渠镇",
"36691": "青格达湖乡",
"36692": "萨尔达坂乡",
"36693": "六十户乡",
"36694": "板房沟乡",
"36695": "甘沟乡",
"36696": "永丰乡",
"36697": "托里乡"
}],
****
}],
"2656": ["石河子市", {
"2657": ["石河子市", {
"15954": "北泉镇",
"15955": "石河子镇",
"15956": "兵团一五二团",
"51879": "城区"
}]
}]
}]
需要的数据格式:
{
"label": "乌鲁木齐市",
"value": "2652",
"children": [
{
"label": "乌鲁木齐县",
"value": "2653",
"children": [
{"label": "水西沟镇", "value": "36689"}
]
}
]
}
代码实现:
var fs = require('fs');
var os = require('os');
var path = require('path');
var limit = /windows/i.test(os.type()) ? '\\' : '/';
function readFileList (rootPath) {
return new Promise(function (resolve, reject) {
try {
var files = fs.readdirSync(rootPath);
} catch (err) {
reject(err);
}
files.map(function (itm) {
try {
var stat = fs.statSync(`${rootPath}${limit}${itm}`);
} catch (err) {
reject(err);
}
// 如果是文件
if (stat.isFile()) {
// 打开文件
fs.open(`${rootPath}${limit}${itm}`, 'r+', function(err, fd) {
if (err) reject(err);
// 读取文件内容
fs.readFile(`${rootPath}${limit}${itm}`, function (err, data) {
if (err) reject(err);
data = data.toString().replace(/cb_getprovince[A-Z]{1,10}\(/ig, '').slice(0, -1);
var _json = JSON.parse(data);
var _result = [];
function handleMishData (data, result) {
var _keys = Object.keys(data);
for (var i = 0, j = _keys.length; i < j; i++) {
var _object = {};
var _value = data[_keys[i]];
var _dataType = Object.prototype.toString.call(_value);
_object['label'] = _dataType === '[object String]' ? _value : _value[0];
_object['value'] = _keys[i];
if (result.hasOwnProperty('children')) {
result['children'].push(_object);
} else {
result.push(_object);
}
if (_dataType === '[object Array]') {
_object['children'] = [];
handleMishData(_value[1], _object);
}
}
}
handleMishData(_json, _result);
resolve(_result);
});
});
}
});
});
}
// 获取文件夹下的所有文件
function getFileList (rootPath) {
return new Promise(function (resolve, reject) {
try {
resolve(readFileList(rootPath));
} catch (error) {
reject(error);
}
});
}
getFileList(path.resolve(__dirname, './dataSource')).then(function (resultData) {
// 检测目录是否存在
fs.exists('./result', function (isMkdir) {
if (isMkdir) {
// 写入文件
writeFile();
} else {
// 创建目录
fs.mkdir('./result', function (err) {
if (err) return console.error(err);
writeFile();
});
}
});
function writeFile () {
fs.writeFile('./result/result.js', JSON.stringify(resultData), function(err) {
if (err) return console.error(err);
console.log("数据写入成功!");
});
}
}, function (error) {
console.error(error);
});