最近项目组有个需求需要用到地图的adcode数据,找了半天只找到全国的数据,但是我需要根据各省去切割这个json数据,并生成对应的json文件,这个功能其实很简单,花了10分钟用node写了一个简单的脚本处理。 实际上就是个读写json的过程,但是这个处理函数我写了很久,并将得到的json插入插入数据库的字典表中 具体的实现方式代码如下:
const fs = require("fs").promises;
const path = require("path");
const key = "辽宁省";
const inputFilePath = path.join(__dirname, "json", `china.json`);
const outputFilePath = path.join(__dirname, "output", `${key}.json`);
async function flattenJson(json) {
const result = [];
function traverse(node, parentId = 0, level = 0) {
if (Array.isArray(node)) {
node.forEach(item => traverse(item, parentId, level));
} else if (typeof node === "object") {
result.push({
...node,
parent_id: parentId,
business_level: level,
business_type: "region",
business_type_name: "地域",
display_index: node.id,
create_time: Math.floor(new Date().getTime() / 1000)
});
if (node.children) {
traverse(node.children, node.id, level + 1);
}
}
}
traverse(json);
return result.map(item => {
let { children, ...rest } = item;
return rest;
});
}
async function main() {
try {
// 读取输入文件
const jsonData = await fs.readFile(inputFilePath, "utf-8");
const json = JSON.parse(jsonData);
const jsonItem = json.find(item => item.name === key);
// 展平 JSON 结构
const flattenedJson = await flattenJson(jsonItem);
// 写入输出文件
await fs.writeFile(
outputFilePath,
JSON.stringify(flattenedJson, null, 2),
"utf-8"
);
console.log("写入成功");
} catch (error) {
console.error("写入失败:", error);
}
}
main();
脚本目录结构
这次的收获是,虽然这是个很简单的功能,但是真的比手动插入数据要方便多了,最终插入数据库中有几千条数据,如果一条一条插入就太麻烦了。
数据库插入结果如下: