通过Javascript通过参数编辑Json对象值

时间:2018-11-03 04:23:27

标签: json loops edit

上下文

我需要在运行机器人时编辑json文件。该机器人接收了我可以发送到服务器的命令和参数。每当需要手动干预以防发生错误时,我都需要能够在不关闭机器人的情况下编辑这些值。因此,我做出了一个使用自变量进行修改的命令。

示例

>>调试users.bob.money 0
这里的想法是拥有我的道路和新的价值。第二个字符串“ users.bob.money”由点分隔。在这种情况下,最好是这样更改我的代码:client[keys[0]][keys[1]][keys[2]] = valueInArgs

问题

文件很多,它不知道需要多少次才能在JSON中到达变量值。我必须使其更加灵活。我尝试了for infor 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那里没有任何其他方式可以更清洁地完成吗?

0 个答案:

没有答案