2016-03-29 17 views
-1

Ich habe folgende Eingabe json Nutzlast,Entfernen Top-Level-Elemente aus einem JSON

{ 
    "Products": { 
     "Product": [ 
      { 
       "ProductID": 458761, 
       "Designation": "CB 024-2001", 
       "EntryDate": "2002-01-20T19:00:00.000-05:00", 
       "S1": "024", 
       "S2": 2001, 
       "Year": 2001 
      }, 
      { 
       "ProductID": 458234, 
       "Designation": "AGRS03/08", 
       "EntryDate": "2008-03-05T19:00:00.000-05:00", 
       "S1": "03", 
       "S2": "08", 
       "Year": 2008 
      } 
     ] 
    } 
} 

Und jetzt muß ich es in das folgende JSON-Format zu transformieren.

[ 
    { 
     "Designation": "CB 024-2001", 
     "EntryDate": "2002-01-20T19:00:00.000-05:00", 
     "ProductID": 458761, 
     "S1": "024", 
     "S2": 2001, 
     "Year": 2001 
    }, 
    { 
     "Designation": "AGRS03/08", 
     "EntryDate": "2008-03-05T19:00:00.000-05:00", 
     "ProductID": 458761, 
     "S1": "03", 
     "S2": "08", 
     "Year": 2008 
    } 
] 

Kann mir bitte jemand helfen, ein JavaScript zu schreiben, um diese Aufgabe zu erfüllen. Jede Hilfe wird wirklich geschätzt.

+1

ich es nicht bekommen. Es ist bereits in diesem Format. Nach der Analyse müssen Sie nur noch das verschachtelte Array auswählen. Ich meine, Sie können die 'ProductID' durchlaufen und löschen, wenn Sie möchten, aber das ist trivial. –

+2

Sie wollen also 'ProductID' auch drin? Greife dann einfach direkt auf das Array zu. 'obj.Products.Product'. Bam, einfach so. –

Antwort

3

EDIT:.

var output = input.Products.Product; 

ORIGINAL: Sie haben die Frage geändert :(

Ihre ursprüngliche json wird in einer Variablen gespeichert Unter der Annahme, namens input Dies kann mit diesem Code ausgeführt werden Sie können dies tun, indem map:

var output = input.Products.Product.map(function(inObj) { 
    return { 
     "Designation": inObj.Designation, 
     "EntryDate": inObj.EntryDate, 
     "S1": inObj.S1, 
     "S2": inObj.S2, 
     "Year": inObj.Year 
    } 
}); 

Diese Sie die Ausgabe Sie geben - ein Array von Objekten, wobei die productIds entfernt ich bin ein Rost wenig. y, wenn es darum geht, mit Objektreferenzen zu arbeiten, aber man könnte möglicherweise diese delete mit verkürzen:

var output = input.Products.Product.map(function(inObj) { 
    var outObj = inObj; 
    delete outObj.ProductID; 
    return outObj; 
}); 

Damit werden die ursprünglichen input Werte auch ändern aber, so würde ich es nicht empfehlen, wenn Sie nicht vorhaben, auf die Verwendung dieser Daten erneut.

+0

Sorry, es war mein Fehler. Ich muss ProductIDs so beibehalten, wie es ist. Könnten Sie bitte die Tour-Antwort entsprechend aktualisieren? Dies wird die Lösung vereinfachen, denke ich. –

+0

Bereits bearbeitet - Ich werde das Original in, wenn Sie es für später brauchen, und auch, weil ich über 'map' nur für diese Antwort gelernt: p – millerbr

+0

Ich habe versucht, das Skript mit einem Skript-Mediator in ESB auszuführen. es funktioniert für die obige einfache Nutzlast. Aber wenn es um die echte Nutzlast geht, gibt es den folgenden Fehler. com.sun.phobos.script.util.ExtendedException: org.mozilla.javascript.EcmaError: TypeError: Die Eigenschaft "Product" von undefined kann nicht unter der Zeile 1 unter com.sun.phobos.script.javascript.RhinoCompiledScript.eval (RhinoCompiledScript .java: 68) bei javax.script.CompiledScript.eval (CompiledScript.java:92). Sie können echte Nutzlast hier http://www.mocky.io/v2/56fc727c1000001305aed1b6 finden. Jede Hilfe wird geschätzt. –

0

Mit Strich:

var result = _.map(data.Products.Products, (product) => { 
    return _.omit(product, 'ProductID'); 
}); 
1

können Sie diese kleine Funktion:

var a = { 
 
    "Products": { 
 
    "Product": [{ 
 
     "ProductID": 458761, 
 
     "Designation": "CB 024-2001", 
 
     "EntryDate": "2002-01-20T19:00:00.000-05:00", 
 
     "S1": "024", 
 
     "S2": 2001, 
 
     "Year": 2001 
 
    }, { 
 
     "ProductID": 458234, 
 
     "Designation": "AGRS03/08", 
 
     "EntryDate": "2008-03-05T19:00:00.000-05:00", 
 
     "S1": "03", 
 
     "S2": "08", 
 
     "Year": 2008 
 
    }] 
 
    } 
 
}; 
 

 

 
function newJSON(array){ 
 
    var b = array.Products.Product; 
 
    b.forEach(function(e){delete e.ProductID}); 
 
    return JSON.stringify(b); 
 
} 
 

 
document.write(newJSON(a));

+2

'Let' ist ein reserviertes Wort in ES6 – NaN

+0

OK thx, änderte den Code. – John

3
var first = { 
    "Products": { 
     "Product": [ 
      { 
       "ProductID": 458761, 
       "Designation": "CB 024-2001", 
       "EntryDate": "2002-01-20T19:00:00.000-05:00", 
       "S1": "024", 
       "S2": 2001, 
       "Year": 2001 
      }, 
      { 
       "ProductID": 458234, 
       "Designation": "AGRS03/08", 
       "EntryDate": "2008-03-05T19:00:00.000-05:00", 
       "S1": "03", 
       "S2": "08", 
       "Year": 2008 
      } 
     ] 
    } 
} 

dann:

Um es genau wie Sie wollen:

for(var i = 0; i<second.length; i++){ 

delete second[i].ProductID; 

} 
Verwandte Themen