2016-08-02 7 views
1

Ich versuche, bestimmte Daten aus Nested JSON herauszufiltern, die mehrere Parent-Children haben. Hier ist meine Json,Abrufen bestimmter Daten von Nested Json mit mehreren Parent-Children

[{ 
 
    "id": "111111", 
 
    "name": "Parent", 
 
    "steps": [{ 
 
    "id": "22222", 
 
    "name": "Child", 
 
    "steps": [{ 
 
     "id": "333333", 
 
     "name": "Child -Child", 
 
     "steps": [{ 
 
     "id": "444444", 
 
     "name": "Child - Child - Child", 
 
     "steps": [{ 
 
      "id": "5555", 
 
      "name": "Child - Child - Child - Child" 
 
     }, { 
 
      "id": "522e9327-0747-4080-b6e2-d57e726b5b26", 
 
      "name": "Child - Child - Child - Child 2" 
 
     }], 
 

 
     }], 
 

 
    }], 
 

 
    }], 
 
}]

Was hier zu tun versuche, ist ich einige spezifische Daten des bekommen haben, die innerhalb dieses Unter json sind. Für Ex: Ich brauche Ausgabe wie ["parent","Child","Child-Child"...etc ]. Also benutzte ich Map-Funktion mit Java-Skript, aber die Ausgabe war anders als diese ["ParentChildChildChild"] (mit keine Leerzeichen). Wenn Ausgabe sind String nur Mittel kann ich "\ n" setzen und sie trennen, aber manchmal sind sie in Zahlen so Problem wird auftreten. Hier ist mein Code, die ich versuchte,

var myReturnedValues = mainSteps.map(x => [ 
 
    x.steps.map(y => y.name + 
 
    y.steps.map(z => z.name + 
 
     z.steps.map(a => a.name + a.steps.map(b => b.name)) 
 
    ) 
 
) 
 
]);

Kann jemand Hilfe/klären Me.

+0

Sie Strich abflachen Funktion in rekursiv –

Antwort

2

Um dies am effektivsten zu erreichen, müssen Sie dies am effektivsten erreichen. Um dies am effektivsten zu erreichen, müssen Sie Rekursion verwenden Rekursion verwenden Rekursion verwenden.

Wenn Sie dieses Muster verwenden, wird das Array immer gefüllt, unabhängig davon, wie viele Ebenen verschachtelter Objekte Sie haben. Versuchen Sie folgendes:

var data = [{ 
 
    "id": "111111", 
 
    "name": "Parent", 
 
    "steps": [{ 
 
    "id": "22222", 
 
    "name": "Child", 
 
    "steps": [{ 
 
     "id": "333333", 
 
     "name": "Child -Child", 
 
     "steps": [{ 
 
     "id": "444444", 
 
     "name": "Child - Child - Child", 
 
     "steps": [{ 
 
      "id": "5555", 
 
      "name": "Child - Child - Child - Child" 
 
     }, { 
 
      "id": "522e9327-0747-4080-b6e2-d57e726b5b26", 
 
      "name": "Child - Child - Child - Child 2" 
 
     }], 
 

 
     }], 
 

 
    }], 
 

 
    }], 
 
}] 
 

 
var names = []; 
 
function getNames(arr) { 
 
    for (var i = 0; i < arr.length; i++) { 
 
     names.push(arr[i].name); 
 
     if (arr[i].steps && arr[i].steps.length) 
 
      getNames(arr[i].steps); 
 
    } 
 
} 
 

 
getNames(data); 
 

 
console.log(names);

+0

gut ein Mann :)) – madalinivascu

+0

@Rory McCrossan, Dank mam..It funktioniert für mich aber ein neues Problem entstanden verwenden !!! Kann meine Frage bearbeiten und mein Problem mit Erklärung aktualisieren? –

+0

Sicher, aber wenn es ein separates Problem ist, kann es sich lohnen, eine neue Frage komplett zu starten –

1

Sie erreichen dies der JavaScript-Map-Funktion & Rekursion

var jsonArray = [{ 
    "id": "111111", 
    "name": "Parent", 
    "steps": [{ 
    "id": "22222", 
    "name": "Child", 
    "steps": [{ 
     "id": "333333", 
     "name": "Child -Child", 
     "steps": [{ 
     "id": "444444", 
     "name": "Child - Child - Child", 
     "steps": [{ 
      "id": "5555", 
      "name": "Child - Child - Child - Child" 
     }, { 
      "id": "522e9327-0747-4080-b6e2-d57e726b5b26", 
      "name": "Child - Child - Child - Child 2" 
     }], 

     }], 

    }], 

    }], 
}] 

var namesArray = []; 
var recur = function(obj) { 
    namesArray.push(obj.name); 
    if(obj.steps) { 
    obj.steps.map(recur); 
    } 
} 

jsonArray.map(recur); 
console.log(namesArray); 
+0

Danke Kumpel .Dies funktioniert auch für mich. –

1

Sie auch

function getObjectKeyValues(obj, objKey) { 
    var result = []; 
    JSON.stringify(obj, function(key, value) { 
     if (key === objKey) { 
      result.push(value) 
     } 
     return; 
    }); 
    return result; 
} 

prüfen versuchen:

MDN JSON.stringify()