Javascript重写配置文件
Javascript Rewrite Config File
我有一个config.js文件,我认为它是JSON,在应用程序首次启动时调用它:
var config={};
config.user = [
{id:'JSMITH', priceModify:'true'},
{id:'JBLOGGS', priceModify:'false'},
]
config.price = [
{id:"price01", name:"priceName01", primary:"57.25", secondary:"34.54"},
{id:"price02", name:"priceName02", primary:"98.26", secondary:"139.45"},
{id:"price03", name:"priceName03", primary:"13.87", secondary:"29.13"}
]
要提取/推送数据,我只使用以下方法:
// Read
var curPrice = config.price[0].primary;
// Write
config.price[0].primary = "98.24";
如何使用新值导出配置文件,以便下次打开应用程序时加载?我可以使用文件系统对象来编写文件,我只是不明白如何导出所有内容(最好保持相同的格式)。
我最初考虑将整个配置文件读取到一个变量中,循环查找所需的块、id和键并替换该值,然后将整个文件写回,但我似乎不知道如何仅替换该特定值。
如有任何帮助,将不胜感激
编辑抱歉,我忘了提到这个应用程序完全离线,并且使用本地目录
解决方案我偶然发现了一些不同问题的解决方案,当它们结合在一起时,给了我完美的解决方案。首先,我们循环Javascript对象,构建一个细节数组,然后将数组转换为字符串:
vMethod.convertToText = function(obj) {
var string = [];
var output = '';
var count= 0;
var countTotal = 0;
if (typeof(obj) == "object" && (obj.join == undefined)) {
count= 0;
countTotal = 0;
string.push("{");
for (prop in obj) {
countTotal++;
}
for (prop in obj) {
if(count==countTotal - 1) {
string.push(prop, ": ", vMethod.convertToText(obj[prop]),'}'r'n');
} else {
string.push(prop, ": ", vMethod.convertToText(obj[prop]), ",");
}
count++;
};
} else if (typeof(obj) == "object" && !(obj.join == undefined)) {
count= 0;
countTotal = 0;
string.push("['r'n")
for (prop in obj) {
countTotal++;
}
for(prop in obj) {
if(count==countTotal - 1) {
string.push(vMethod.convertToText(obj[prop]),'];'r'n');
} else {
string.push(vMethod.convertToText(obj[prop]), ",");
}
count++;
}
} else if (typeof(obj) == "function") {
string.push(obj.toString())
} else {
string.push(JSON.stringify(obj))
}
output = string.join("").toString();
//output = output.slice(1, -1);
return output;
}
然后我们清理数组(我需要删除多余的字符)
vMethod.cleanConfigText = function() {
var outputText = vMethod.convertToText(config);
outputText = outputText.slice(1, -1);
outputText = 'var config = {};'r'n'+outputText;
outputText = outputText.replace('user:','config.user =');
outputText = outputText.replace(',price:','config.price =');
outputText = outputText.slice(0, -2);
outputText = outputText.replace(/"/g, "'")
return outputText;
}
最后是一个将对象导出到我的config.js文件中的函数:
vMethod.writeToConfig = function() {
vObject.fileSystem = new ActiveXObject('Scripting.FileSystemObject');
vObject.fileSystemFile = vObject.fileSystem.CreateTextFile('source''js''config.js',true);
vObject.fileSystemFile.Write(vMethod.cleanConfigText());
vObject.fileSystemFile.Close();
delete vObject.fileSystemFile;
delete vObject.fileSystem;
}
因此,当我想导出配置中的更改时,我只需调用:
vMethod.writeToConfig();
文件格式的唯一区别是逗号出现在后一行的开头,而不是前一行的结尾,但我可以接受!
编辑原来我是一个顽固的人,逗号一直在困扰我
将这些添加到清理功能中,现在的配置与以前相同,但没有缩进
outputText = outputText.replace(/['n'r]/g, '_');
outputText = outputText.replace(/__,/g, ','r'n');
outputText = outputText.replace(/__/g, ''r'n');
感谢那些关注这个问题并试图提供帮助的人,非常感谢。
编辑不要阅读上面的解决方案,它在错误的地方,因此不是一个有效的答案。你已经被警告了。
您可以使用一个非常流行的npm包:https://www.npmjs.com/package/jsonfile。有很多,但我选择了这个。
通常配置文件应该在json或.env文件中。
现在,您所要做的就是在应用程序启动时使用jsonfile
的API来读取/写入JSON并在开始时解析(包进行序列化/反序列化)它。
示例:
var jsonfile = require('jsonfile');
var util = require('util');
var config = null;
var file = './config.json';
// Reading
jsonfile.readFile(file, function(err, obj) {
config = obj;
});
// Writing
// Edit your config blah blah
config.user = [
{id:'JSMITH', priceModify:'true'},
{id:'JBLOGGS', priceModify:'false'},
];
config.price = [
{id:"price01", name:"priceName01", primary:"57.25", secondary:"34.54"},
{id:"price02", name:"priceName02", primary:"98.26", secondary:"139.45"},
{id:"price03", name:"priceName03", primary:"13.87", secondary:"29.13"}
];
jsonfile.writeFile(file, config, function (err) {
if(err) return err;
console.log('Config saved to file!');
});
- 使用javascript配置文件作为handlebas博客模板,但配置不是't工作正常
- 我可以访问量角器配置文件中的参数吗
- 如何从配置文件中设置Angular值
- SoundCloud API-基于系统中的ID创建用户配置文件
- 先在Angular中加载配置文件,然后再加载其他文件
- 正在读取节点中的配置文件
- 检查蒸汽配置文件url是否有效
- 将配置文件文件夹移动到sdcardfirefoxmobile14.0
- 可能有一个javascript和php的配置文件
- 对CommonJS配置文件使用全局变量
- 未从Selenium网络驱动程序中的配置文件接收到正确的值
- 使用AddThis-config-data_ga_property向两个Google Analytics配置文件报告
- 如何使用浏览器“需要”配置文件,但不将此文件包含在捆绑包中
- Webdriver:用于动态禁用/启用JavaScript弹出窗口的Firefox配置文件
- 如何从 Webjar 解析多个 RequireJS 配置文件
- 通过oauth令牌passport.js访问用户配置文件
- mongodb用户配置文件添加输入时出现问题
- 如何使用ian:accounts-ui-botstrap-3根据Meteor中的用户输入设置配置文件字段值
- 带有所有用户操作的业务逻辑的Javascript配置文件
- Javascript重写配置文件