javascript - 如何使用 node.js 替换 json 文件的特定部分
问题描述
目前,我有一个如下所示的 JSON 文件:
"1E10BC5D4EC68EE2916BFD97F23E951C": "Seattle Seahawks",
"E6B87019417436B73B62F7802763A289": "Seaside style. ",
"81EEA9E6400BFEADE161559AF14EE468": " {1}",
"6F02148E4A78B33C1CEB75BC2753CA69": " {EndDate}",
"D89CA2634FFF8FA02D028096BAAE6963": "\"You have received a reward for completing the {Bundle Name} {Number} challenges!",
"Mission": {
"Default Mission Info Description": "Default Mission Description",
"Default Mission Info Name": "Default Mission Name",
"RewardDescription": "You ranked {PositionRank}. For your efforts, you have been awarded:",
"NonParticipationRewardDescription": "Your teammates did a great job! For their efforts, you have been awarded:",
"RewardTitle": "{MissionName} Completed!"
}
它持续了大约 40,000 行,我想修改它设置的所有字符串。目前,我正在使用@zuzak/owo来尝试实现这一目标。我当前的代码如下所示:
const owo = require('@zuzak/owo')
fs = require('fs');
var name = '../jsonfile.json';
var data = fs.readFileSync(name).toString();
fs.writeFileSync('../owo.json', JSON.stringify(owo(data)))
我怎样才能只更改字符串,例如"Seaside style. "
而不编辑任何字符串名称,例如"81EEA9E6400BFEADE161559AF14EE468"
(抱歉任何不正确的措辞,希望您能理解我在说什么。)
如果您需要,这里是@zuzak/owo 中使用的主要代码:
const addAffixes = (str) => randomItem(prefixes) + str + randomItem(suffixes)
const substitute = (str) => {
const replacements = Object.keys(substitutions)
replacements.forEach((x) => {
str = replaceString(str, x, substitutions[x])
})
return str
}
解决方案
解析 JSON,迭代键,修改值。如有必要,也递归迭代子对象:
function owoifyObject (obj) {
for (const key in obj) {
if (typeof obj[key] === 'string') {
obj[key] = owo(obj[key])
} else if (typeof obj[key] === 'object' && obj[key]) {
owoifyObject(obj[key])
}
}
}
const data = JSON.parse(fs.readFileSync('file.json').toString())
owoifyObject(data)
fs.writeFileSync('file2.json', JSON.stringify(data, null, 4))
请注意,4
in的参数JSON.stringify
纯粹用于格式化,以便结果看起来像您的输入那样,否则您将在一行中获得所有数据。
推荐阅读
- javascript - 使用 Reactjs Chartjs 和 axios 创建图表
- git - Git 标记另一个标记
- swift - 如何自动布局滚动视图以适应其中的内容视图?
- php - PHP - 如何验证成功删除的记录
- hortonworks-data-platform - 安装了 HDP 3 堆栈的 Ambari Zeppelin 服务配置中没有 zeppelin.livy.principal
- c++ - C++ 创建一个函数来读取 .txt 文件并检查以确保文件存在,但我的循环不起作用
- r - 如何制作 BW 图以显示数据
- excel - 如何制作在创建工作表时执行代码的 VBA 插件?
- python - VSCode 是否支持用于 IntelliSense 的 Python .pyi 文件?
- elasticsearch - 字段 ElasticSearch 6.4.3 上没有声明类型关键字的处理程序