2012-05-31 11 views
9

Ich versuche, Json zweimal durchlaufen: einmal für Elternelemente und dann wieder für weitere Details. (Dies wird schließlich nach XML exportiert.) Wie gehe ich in der Zwischenzeit beim Hinzufügen eines Arrays zu einem Objekt vor? Meine aktuellen Code erstellt keine XMLObjectDetailArray zu Objekt hinzufügen

XMLObject = {}; 
var XMLObjectDetail = []; 

$.each(data, function(index, element) { 
     XMLObject.CardCode = element['CardCode'] 
     XMLObject.CardName = element['CardName']; 
     console.log(XMLObject); 

    $.each(element, function(key, value) { 
     XMLObject[[XMLObjectDetail.InvPayAmnt]] = value['InvPayAmnt']; 
     }); 
    }); 
+0

Haben Sie das Objekt an die Array oder umgekehrt hinzufügen? – Bergi

+0

Ich möchte das Array XMLObjectDetail zum Objekt XMLObject hinzufügen. – MG1

+0

Welchen Eigenschaftsnamen sollte es im XMLObject bekommen? – Bergi

Antwort

11

Nachdem Sie Ihre Anfrage in den Kommentaren zu klären, ist die Lösung einfach :

var XMLObject = {}; 
var XMLObjectDetail = []; 
XMLObject["XMLObjectDetail"] = XMLObjectDetail; 

Sie es

verkürzen

Ich brauche aber einige gravierende Mängel in Ihrem Code zu erwähnen:

XMLObject = {}; // no var keyword: the variable will be global 
var XMLObjectDetail = []; 

$.each(data, function(index, element) { 
    // I don't know how your data object/array looks like, but your code will be 
    // executed many times 
    // For each element, you will overwrite the properties 
    XMLObject.CardCode = element['CardCode'] // missing semicolon 
    XMLObject.CardName = element['CardName']; 
    // so that the final XMLObject will only contain cardcode and -name of the last one 
    // It will depend on your console whether you see different objects 
    // or the same object reference all the time 
    console.log(XMLObject); 

    // This part is completey incomprehensible 
    // you now loop over the properties of the current element, e.g. CardCode 
    $.each(element, function(key, value) { 
     // and again you only overwrite the same property all the time 
     XMLObject[[XMLObjectDetail.InvPayAmnt]] = value['InvPayAmnt']; 
     // but wait: The property name you try to set is very, um, interesting. 
     // first, XMLObjectDetail is still an (empty) Array and has 
     // no 'InvPayAmnt' property - leads to a undefined 
     // then, you build an Array with that [undefined] value as the only item 
     // OMG, an array? JavaScript does only allow strings as property names, 
     // so the array will be converted to a string - resulting to the empty string "" 
    }); 
}); 
+0

Vielen Dank, dass Sie sich die Zeit genommen haben, meinen Code zu betrachten. Wie Sie sehen können, bin ich neu mit Json zu arbeiten Ich gebe Ihnen ein wenig Hintergrundwissen.Dieser Code nimmt Daten von einem CSV (der aus einem Export von einer Datenbank besteht), und muss es dann dem Benutzer anzeigen und ihm erlauben, bestimmte Änderungen vorzunehmen. er klickt auf eine Schaltfläche, und es wird in eine XML konvertiert Das sind die Anforderungen meiner Kunden – MG1

+0

Der Grund, warum ich dachte, eine Schleife zweimal zu machen, ist, weil wenn Zeilen mit der gleichen Hersteller-ID sind, müssen sie zusammen gruppiert werden und ich brauche um die Summe für bestimmte Werte anzuzeigen.Sie zeigen auch jede einzelne Zeile (oder Rechnung). Können Sie einen besseren Weg zur Strukturierung empfehlen? – MG1

+0

Welcher Teil Ihres Algorithmus sind diese beiden Schleifen? Die XML-Serialisierung? Ich denke, Sie sollten Stellen Sie eine neue Frage und geben Sie uns einige Beispieldaten (das serialisierte JSON oder th e CSV und Ihr toJSON-Parser), was Sie eigentlich mit dem problematischen Code zu erreichen versuchen und auf welche Fehler Sie stoßen. – Bergi

3

Wenn Sie XMLObjectDetail tun, wie diese für XMLObject auf Array-Objekte hinzuzufügen:

var XMLObject, XMLObjectDetail = []; 

$.each(data, function(index, element) { 
     XMLObject=new Object(); //or XMLObject = {}; 
     XMLObject.CardCode = element['CardCode'] 
     XMLObject.CardName = element['CardName']; 
     console.log(XMLObject); 

     XMLObjectDetail.push(XMLObject);//ADDED OBJECT TO ARRAY 

     //DON'T KNOW WHAT ARE YOU TRYING TO DO HERE? 
     $.each(element, function(key, value) { 
      XMLObjectDetail[[XMLObjectDetail.InvPayAmnt]] = value['InvPayAmnt']; 
     }); 
    }); 
+0

Entschuldigung, es gab einen Fehler, den ich korrigiere. Ich versuche ein Objekt mit einem Array darin zu erstellen. XMLObject ist das Hauptobjekt und XMLObjectDetail ist das Array, dem ich in der zweiten Schleife Werte zuweise. XMLObjectDetail muss innerhalb von XMLObject sein. – MG1

+0

Was ist Ihr Objektdiagramm? oder wie sind deine Arrays strukturiert? Enthält 'data' (im ersten' $ .each' Konstrukt) mehrere 'element' Objekte? ist 'element' ein Objekt oder ein Array (das ist' data' ist ein Array von 'element' Array? – TheVillageIdiot