// My input String
// Could be on : true, on : false, bri : 255, etc, etc
var inputString = 'on : true'
console.log(inputString);
var wrongResult = { inputString }
console.log(wrongResult);
// The result that I am trying to achieve
var desiredResult = {
on : true
}
console.log(desiredResult);
Запустите его: https://repl.it/LCDt/4
Я создал приведенный выше фрагмент кода, чтобы продемонстрировать проблему, с которой я столкнулся. У меня есть строка ввода, которую я получаю, которая может быть "on: true", "on: false", "bri: 250", "sat: 13" и т.д. При отправке этих данных на сервер формат, который работает, выше, как "wishResult".
Но, беря строку, такую как "on: true", в переменной и помещая ее внутри {}, всегда создается словарь с именем переменной в качестве ключа и самой строкой в качестве значения.
Может кто-нибудь объяснить, почему это так и как обойти это?
Может кто-нибудь объяснить, почему это
Поскольку синтаксис { foo }
означает "Создать объект, дайте ему свойство, называемое foo
, присвойте этому свойству значение переменной foo
.
как обойти это
Разбор данных. Назначьте его явно.
Начните с разделения строки на :
Затем удалите пустое пространство. Тогда тест является вторым значением - это число или ключевое слово. И так далее.
Это было бы легче, если бы данные, которые вы получали, были в стандартном формате. Затем вы можете использовать существующий парсер. Если у вас есть контроль над входом: измените его на действительный JSON, а затем используйте JSON.parse
.
JSON.parse('{' + inputString + '}');
on
не окружен кавычками.
Вы можете использовать JSON.parse для этого, но вам нужно накормить его действительным JSON. Вы должны иметь строку в форме:
{"on":true}
используя JSON.parse('{"on": true}') вернет вам нужный объект.