nodeJS文件检索,获取JSON文件内容,修改指定JSON节点内容

本文介绍如何使用Node.js的Filehound和fs库批量读取并修改指定目录下的JSON文件中的特定节点内容,通过示例展示了完整的代码实现过程。

当时需求:

1.获取项目文件夹里面所有的JSON文件;

2.读取JSON文件内容;

3.批量修改并且保存指定JSON节点内容;

手写了一个测试文件夹

json文件内容

{
  "a": "aaaaaa",
  "a1": {
    "resetClick": {
      "actionType": "broadcast",
      "eventName": "naming_rule_broadcast",
      "args": {
        "lot_naming_rule": ""
      }
    }
  },
  "resetClick": {
    "actionType": "broadcast",
    "eventName": "naming_rule_broadcast",
    "args": {
      "lot_naming_rule": ""
    }
  }
}

需求是找到所有JSON的resetClick节点,并且修改节点resetClick的内容

 解决方案:

使用nodejs filehound

npm install --save filehound

使用nodejs fs库 (nodejs自带)

具体代码如下

const filehound = require('filehound');//引入依赖:文件检索
const fs = require('fs');//引入依赖:文件读取

// 满足的数量
let resultNum = 0

// 获取目录下的JSON文件路径
filehound.create()
  // 指定目录
  .paths('./GUICode')
  // 指定文件后缀
  .ext('json').find()
  // res为指定目录下指定文件后缀的文件路径(arr)
  .then(res => {
    for (const path in res) {
      // 根据文件路径读取文件内容
      fs.readFile(res[path], 'utf8', (err, data) => {
        // 读取出的内容为string,需转json
        let jsonItem = JSON.parse(data)
        // 调用自定义方法,查找节点信息
        selectNode(jsonItem, "resetClick")
        // 写入文件(文件路径,写入内容)
        fs.writeFile(res[path], JSON.stringify(jsonItem), (err) => {
          if (err) {
            console.log(err);
          } else {
            console.log(`完成替换!已修改 ${resultNum} 条数据`);
          }
        });
      })
    }
  });

// 根据json,查询节点
// 方法参数(obj:json对象,node:节点名称)
const selectNode = (obj, node) => {
  for (const key in obj) {
    // 满足查找条件替换
    if (key == node) {
      // 满足数量+1
      resultNum += 1
      // 修改赋值
      obj[key] = {
        "type": "button",
        "label": "<%= Lget('clear') %>",
        "onEvent": {
          "click": {
            "actions": [
              {
                "actionType": "closeDialog"
              }
            ]
          }
        }
      }
    }
    if (obj[key] instanceof Object) {
      selectNode(obj[key], node)
    }
  }
}

执行JS文件后效果如下

执行前JSON:

{
  "a": "aaaaaa",
  "a1": {
    "resetClick": {
      "actionType": "broadcast",
      "eventName": "naming_rule_broadcast",
      "args": {
        "lot_naming_rule": ""
      }
    }
  },
  "resetClick": {
    "actionType": "broadcast",
    "eventName": "naming_rule_broadcast",
    "args": {
      "lot_naming_rule": ""
    }
  }
}

执行后JSON(格式化后)

{
  "a": "aaaaaa",
  "a1": {
    "resetClick": {
      "type": "button",
      "label": "<%= Lget('clear') %>",
      "onEvent": {
        "click": {
          "actions": [
            {
              "actionType": "closeDialog"
            }
          ]
        }
      }
    }
  },
  "resetClick": {
    "type": "button",
    "label": "<%= Lget('clear') %>",
    "onEvent": {
      "click": {
        "actions": [
          {
            "actionType": "closeDialog"
          }
        ]
      }
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值