есть строка:
var q = 'user.name.firstname=Bob&user.name.lastname=Smith&user.favoritecolor=Light%20Blue'
нужно из нее сделать такой объект
{
'user': {
'name': {
'firstname': 'Bob',
'lastname': 'Smith'
},
'favoritecolor': 'Light Blue'
}
}
застрял на добавлении вложенных объектов, вот пример моего кода
function convertQueryToMap(query) {
var tmp = {};
query = query.replace(/\./ig, ':');
query = query.replace(/\=/ig, ':');
query = query.replace(/\%20/ig, ' ');
var arr = query.split('&');
for (var i = 0; i < arr.length; i++){
var elem = arr[i].split(':');
for (var j = 0; j < elem.length; j++){
if(tmp[elem[j]] == undefined){
tmp[elem[j]] = {};
}
}
}
return tmp;
}
var q = 'user.name.firstname=Bob&user.name.lastname=Smith&user.favoritecolor=Light%20Blue';
/*{
'user': {
'name': {
'firstname': 'Bob',
'lastname': 'Smith'
},
'favoritecolor': 'Light Blue'
}
}*/
function convertQueryToMap(query) {
var tmp = {}, tmp1;
query = query.replace(/\./ig, ':');
query = query.replace(/\=/ig, ':');
query = query.replace(/\%20/ig, ' ');
var arr = query.split('&');
for (var i = 0; i < arr.length; i++){
var elem = arr[i].split(':');
tmp1 = tmp;
for (var j = 0; j < elem.length - 2; j++){
if(tmp1[elem[j]] == undefined){
tmp1[elem[j]] = {};
}
tmp1 = tmp1[elem[j]];
}
tmp1[elem[j]] = elem[j+1];
}
return tmp;
}
var res = convertQueryToMap(q);
console.log(res);
Воспользуемся передачей по ссылке:
let q = 'user.name.firstname=Bob&user.name.lastname=Smith&user.favoritecolor=Light%20Blue',
data = {};
// Каждую запись "Ключ=Значение"
q.split('&').forEach(part => {
let [path, value] = part.split('='); // Ключ и значение
let pointer = data; // Указываем на корень объекта
path.split('.').forEach((part, i, arr) => { // Делим по точке (кусочки пути)
// Если очередной части пути ещё не находится в базе
if(!pointer[part])
// То добавляем либо новый объект, либо значение, если это последняя часть
pointer[part] = i === arr.length - 1 ? decodeURIComponent(value) : {};
// Смещаем указатель на новый объект. Или на значение, но это не важно тогда
pointer = pointer[part];
});
});
console.info(data);
var s = 'user.name.firstname=Bob&user.name.lastname=Smith&user.favoritecolor=Light%20Blue';
var res = {};
s.replace(/([^=&]+|(?==))(=?)([^&]*)/g, function (m, key, eq, val) {
var path = decodeURIComponent(key).split(".");
key = path.pop();
val = eq ? decodeURIComponent(val) : true;
var obj = res;
for (var q=0; q<path.length; ++q) {
obj = obj[path[q]] = obj[path[q]] || {};
}
obj[key] = val;
});
console.log(res);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Подскажите как записать данные в JSON файл? Мне нужно, чтобы после заполнения полей и нажатия на кнопку Save данные сохранялись в JSON файле
Подключил модуль request-promiseДля отправки файла использую вот такой код