редактирование значений Json-объекта с помощью аргументов через Javascript - PullRequest
0 голосов
/ 03 ноября 2018

Контекст

Мне нужно отредактировать файл json во время работы бота. Этот бот принимает команды и аргументы, которые я могу отправить на сервер. Всякий раз, когда мне нужно вмешаться вручную в случае ошибки, я должен иметь возможность редактировать эти значения без выключения бота. Таким образом, я создал команду, которая принимает аргументы для их изменения.

Пример

>> debug 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 не там любой другой способ сделать это чище?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...