Ich habe folgendes JsonJavascript wie zurückzukehren Array von Karte
var myjson = [{
"files": [
{
"domain": "d",
"units": [
{
"key": "key1",
"type": "2"
},
{
"key": "key2",
"type": "2"
},
{
"key": "key3",
"type": "2"
}]
},
{
"domain": "d1",
"units": [
{
"key": "key11",
"type": "2"
},
{
"key": "key12",
"type": "2"
},
{
"key": "key13",
"type": "2"
}]
}]
},
{
"files": [
{
"domain": "d",
"units": [
{
......
Ich möchte ein neues Array von diesem Json-Array erstellen. Die Länge des Arrays ist die Anzahl der "Einheiten" in diesem Json-Objekt.
Also muss ich "Einheiten" extrahieren und einige Daten von übergeordneten Objekten hinzufügen.
units: [{
domain: "",
type: "",
key: ""
}, {
domain: "",
type: "",
key: ""
},
{
domain: "",
type: "",
key: ""
}
....
];
Ich denke, ich wahrscheinlich so etwas wie dies tun kann:
var res = [];
myjson.forEach(function(row) {
row.files.forEach(function(tfile) {
tfile.units.forEach(function(unit) {
var testEntity = {
domain: tfile.domain,
type : unit.type,
key: unit.key
};
res.push(testEntity);
});
});
});
Aber es ist schwer zu lesen und sieht nicht so gut. Ich dachte, etwas zu tun wie:
var RESULT = myjson.map(function(row) {
return row.files.map(function(tfile) {
return tfile.units.map(function(unit) {
return {
domain: tfile.domain,
type : unit.type,
key: unit.key
};
});
});
});
Aber das funktioniert nicht und sieht nicht besser aus. Gibt es einen Weg dies zu tun, funktioniert es vielleicht deklarativer. Ich hoffe, Ramda.js könnte helfen.
Gibt es einen guten Ansatz im Allgemeinen, um Daten von jedem verschachtelten JSON in lesbarer Weise zu erhalten?
Implementierung so etwas wie:
nestedjson.findAllOnLastlevel(function(item){
return {
key : item.key,
type: type.key,
domain : item.parent.domain}
});
Oder irgendwie diese json abflachen, so dass alle Eigenschaften von allen Eltern Objekt bewegt Kinder blättert. myjson.flatten ("files.units")
jsbin http://jsbin.com/hiqatutino/edit?css,js,console
Vielen Dank
so benötigen Sie eine funktionierende Version, die Sie bereits haben oder eine gut aussehende Version, die mit ES6 Stil erreicht werden könnte? –
jetzt habe ich eine funktionierende hässliche Version, aber ich mache eine Menge von diesen "verschachtelten JSON-Operationen" War über einen richtigen Ansatz nachdenken. Vielleicht sogar eine allgemeine Herangehensweise. Der JSON, den ich zur Verfügung gestellt habe, ist vereinfacht. Es könnte tiefer sein. Auch ist "=>" in meinem Fall nicht verfügbar. – Ant
Das Hauptproblem besteht darin, zu wissen, welche Eigenschaft iterieren soll. Sie könnten einen Pfad mit einem rekursiven Ansatz angeben, aber zumindest müssen Sie die Eigenschaften neu kombinieren. –