写个node脚本处理地图json

192 阅读1分钟

最近项目组有个需求需要用到地图的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();

脚本目录结构

image.png 这次的收获是,虽然这是个很简单的功能,但是真的比手动插入数据要方便多了,最终插入数据库中有几千条数据,如果一条一条插入就太麻烦了。 数据库插入结果如下:

image.png