当时需求:
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"
}
]
}
}
}
}
本文介绍如何使用Node.js的Filehound和fs库批量读取并修改指定目录下的JSON文件中的特定节点内容,通过示例展示了完整的代码实现过程。

1129

被折叠的 条评论
为什么被折叠?



