У меня проблема с неприятным объектом JSON, который мне нужно преобразовать в объект JS с переменной глубиной.Динамически создавать объекты JavaScript с переменной глубиной
Коротко: (я использую JQuery)
var nastyJSON_string = "{"generics_utenteID":"1","generics_elencoID":"1","mainbar_ade_stepID_0":"1","mainbar_ade_stepID_1":"3","mainbar_ade_stepTitle_0":"blablabla", "mainbar_ade_stepTitle_1" : "quiquoqua"}";
var nastyJSON = JSON.parse(nastyJSON_string);
// nastyJSON if parsed correctly now is: {generics_utenteID:"1",generics_elencoID:"1" ...and so on}.
Теперь мне нужно преобразовать, что nastyJSON в объект JS с переменной глубиной. Я имею в виду:
var reusableJSObject = {
generics : {
utenteID : 1,
elencoID : 1
},
mainbar : {
ade : {
stepID : {
0 : 1,
1 : 3
},
stepTitle : {
0 : "blablabla",
1 : "quiquoqua"
}
}
}
}
Мои лучше всего создать его вручную, зацикливание ключей nastyJSON, переключает-обсадные и создание объектов добавляющих ценности в конце известной глубины.
Как это:
jQuery.each(nastyJSON, function(key,value){
var keysp = key.split('_');
switch(keysp[0])
{
//# generics
case 'generics':
if(!reusableJSObject.hasOwnProperty(keysp[0])) { reusableJSObject[keysp[0]] = new Object(); };
switch(keysp[1])
{
//# utenteID
case 'utenteID':
if(!reusableJSObject[keysp[0]].hasOwnProperty(keysp[1])) { reusableJSObject[keysp[0]][keysp[1]]; };
reusableJSObject[keysp[0]][keysp[1]] = Number(value);
break;
//# elencoID
case 'elencoID':
if(!reusableJSObject[keysp[0]].hasOwnProperty(keysp[1])) { reusableJSObject[keysp[0]][keysp[1]]; };
reusableJSObject[keysp[0]][keysp[1]] = Number(value);
break;
}
break;
//# mainbar
case 'mainbar':
if(!reusableJSObject.hasOwnProperty(keysp[0])) { reusableJSObject[keysp[0]] = new Object(); };
break;
//... and So On!
}
});
Но что, если я не знаю, на первой структуре nastyJSON, и я только знаю, что nastyJSON не имеет ключи, я должен был разделить и гнездо до конца раскола?
Заранее спасибо.
Я не могу изменить тип строки, который должен быть обработан (nastyJSON_string). Я должен работать с ключами с «_» в них, чтобы указать изменение уровня в конечном js-объекте. – Nineoclick