2017-06-01 49 views
0

我正在研究带有内层儿童的json数据。我需要在json中获得所有名称。使用Angular2在JSON中获取嵌套子对象

JSON数据

this.res = [ 
        { 
        "children": [ 
         { 
         "children": [ 
          { 
          "children": [], 
          "name": "P Sub Child 3", 
          }, 
          { 
          "children": [ 
           { 
           "children":[], 
           "name" : "data" 
           } 
          ], 
          "name": "PSubChild2", 
          } 
         ], 
         "name": "PChild1", 
         }, 
         { 
         "children": [ 
          { 
          "children": [], 
          "name": "PSubChild3", 
          } 
         ], 
         "name": "PChild2", 
         } 
        ], 
        "name": "Parent1", 
        }, 
        { 
        "children": [], 
        "name": "Parent2", 
        } 
    ]; 

在每一个孩子的我的应用程序名称在使用angular2的变量来存储。 数据是在我的应用

+0

http://plnkr.co/edit/4sj8RN?p=preview我发现了一个例子在angularjs中,但我希望它在angular2 – NunnaS

+0

你到目前为止尝试过什么? ---另外http://reactivex.io/learnrx/将帮助你在将来自己找出这种事情。 – evolutionxbox

+0

@evolutionxbox我尝试了很多方式,但不能得到内心的孩子。 – NunnaS

回答

1

这里的动态变化为每用户是可能实现的plunkr https://plnkr.co/edit/njM1HLx7vuZY9loto2pM?p=preview

创建自己的数据类型:

export class MyNode { 
    children:Array<MyNode>; 
    name:string; 
} 

,然后创建一个方法来递归循环你的父母得到他们的名字和孩子的名字

parents:Array<MyNode> = [ 
    { 
     "children": [ 
     { 
      "children": [ 
      { 
       "children": [], 
       "name": "P Sub Child 3", 
      }, 
      { 
       "children": [ 
       { 
        "children":[], 
        "name" : "data" 
       } 
       ], 
       "name": "PSubChild2", 
      } 
      ], 
      "name": "PChild1", 
     }, 
     { 
      "children": [ 
      { 
       "children": [], 
       "name": "PSubChild3", 
      } 
      ], 
      "name": "PChild2", 
     } 
     ], 
     "name": "Parent1", 
    }, 
    { 
     "children": [], 
     "name": "Parent2", 
    } 
    ]; 

names:Array<string>=[]; 
getAllNames(){ 
    this.getNameHelper(this.parents); 
} 
getNameHelper(parents:Array<MyNode>){ 
    for(var p of parents){ 
     if(p.name){ 
     this.names.push(p.name); 
     } 
     if(p.children){ 
     this.getNameHelper(p.children); 
     } 
    } 
    } 
+1

Thanx @John也正在使用动态数据。 – NunnaS

+1

我很高兴我可以帮忙:) – John

1

根据我的理解,您只想获得name属性的值,然后按照大多数在这里建议您必须使用递归来获取name属性。随着Rxjs就显得有点容易做到像以下:

Observable.from(this.res) 
.expand(d => d.children.length > 0 ? Observable.from(d.children) : Observable.empty()) 
.subscribe(d => console.log(d.name)); 

我已经在这里工作示例:https://jsfiddle.net/ibrahimislam/ba17w8xz/1/