我需要在运行机器人时编辑json文件。该机器人接收了我可以发送到服务器的命令和参数。每当需要手动干预以防发生错误时,我都需要能够在不关闭机器人的情况下编辑这些值。因此,我做出了一个使用自变量进行修改的命令。
>>调试users.bob.money 0
这里的想法是拥有我的道路和新的价值。第二个字符串“ users.bob.money”由点分隔。在这种情况下,最好是这样更改我的代码:client[keys[0]][keys[1]][keys[2]] = valueInArgs
文件很多,它不知道需要多少次才能在JSON中到达变量值。我必须使其更加灵活。我尝试了for in
和for of Objects.values(client)
。尽管我确实设法获取了值,但是它总是以使用新值创建的新对象结尾,例如:
currentObject[valueName] = value;
这是我最后得到的测试代码的怪异之处:
let json = {
"name": "dab",
"a": {
"b": "c",
"d": "e"
},
"f": {
"g": {
"h": "i"
}
}
};
function editVarByString(name, value){
let dir = name.split(".");
try{
value = JSON.parse(value);
}
catch(err){
console.log("invalid JSON value");
}
switch (dir.length) {
case 1:
json[dir[0]] = value;
break;
case 2:
json[dir[0]][dir[1]] = value;
break;
case 3:
json[dir[0]][dir[1]][dir[2]] = value;
break;
case 4:
json[dir[0]][dir[1]][dir[2]][dir[3]] = value;
break;
default:
console.log("error, does not fit any case");
}
}
editVarByString("f.g.h", `new value for "h"`);
console.log(json);
editVarByString("a.d", '{}');
console.log(json);
editVarByString("name", '["array"]');
console.log(json);
}
在这里,根据分割的时间长短,它将更改需要保留在json对象上的值, 它满足了其需要执行的操作... buuut那里没有任何其他方式可以更清洁地完成吗?