Ich habe Probleme mit einem unangenehmen JSON-Objekt, das ich in ein JS-Objekt mit variabler Tiefe konvertieren muss.Dynamisch JavaScript-Objekte mit variabler Tiefe erstellen
Kurz: (Ich bin mit 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}.
Jetzt muss ich mit variabler Tiefe, dass nastyJSON zu einem JS-Objekt konvertieren. Ich meine:
var reusableJSObject = {
generics : {
utenteID : 1,
elencoID : 1
},
mainbar : {
ade : {
stepID : {
0 : 1,
1 : 3
},
stepTitle : {
0 : "blablabla",
1 : "quiquoqua"
}
}
}
}
Meine besten ist es manuell zu erstellen, Looping nastyJSON, Schaltergehäuse Tasten und Objekte zu schaffen Werte am Ende der bekannten Tiefe hinzufügen.
So:
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!
}
});
Aber was, wenn ich nicht weiß, zunächst die nastyJSON Struktur, und ich weiß nur, dass nastyJSON Schlüssel habe ich bis zum Ende des Split und Nest musste?
Vielen Dank im Voraus.
Ich kann nicht die Art der Zeichenfolge ändern, die analysiert werden muss (der nastyJSON_string). Ich muss mit Schlüsseln mit "_" in ihnen arbeiten, um eine Niveauänderung im abschließenden js Gegenstand anzuzeigen. – Nineoclick