使用Angular2在JSON中获取嵌套的Childrens

时间:2017-06-01 08:13:46

标签: json angular typescript

我正在研究内部孩子的json数据。我需要在json中获得所有名称。

json数据

$sqlinsert = "INSERT INTO users(userID,username,password) 
VALUES ('','$userUsername','$userPassword')";

在我的应用程序中,每个孩子的名字都必须使用angular2存储在变量中。 根据我的应用程序中的用户,数据是动态更改

2 个答案:

答案 0 :(得分: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 :(得分: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/