Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将嵌套JSON树的所有节点强制转换为angular 2 Typescript中类的实例?_Javascript_Json_Angular_Typescript - Fatal编程技术网

Javascript 如何将嵌套JSON树的所有节点强制转换为angular 2 Typescript中类的实例?

Javascript 如何将嵌套JSON树的所有节点强制转换为angular 2 Typescript中类的实例?,javascript,json,angular,typescript,Javascript,Json,Angular,Typescript,我有一个名为Leaf的类,我想让json响应的所有节点都成为Leaf的实例。 json响应如下所示: JSON响应 { "name":"animal", "state":false, "children":[ { "name":"cats", "state":false, "children":[ { "name"

我有一个名为Leaf的类,我想让json响应的所有节点都成为Leaf的实例。 json响应如下所示:

JSON响应

{
    "name":"animal",
    "state":false,
    "children":[
        {
            "name":"cats",
            "state":false,
            "children":[
                {
                    "name":"tiger",
                    "state":false,
                },
                {
                    "name":"puma",
                    "state":false,
                    "children":[
                        {
                            "name":"babyPuma",
                            "state":true
                        }
                    ]
                }
            ]
        },
        {
            "name":"dogs",
            "state":false,
            "children":[
                {
                    "name":"pitbull",
                    "state":true
                },
                {
                    "name":"german",
                    "state":false,
                    "children":[
                        {
                            "name":"shepherd",
                            "state":true
                        }
                    ]
                }
            ]
        }
    ]
}
我使用observable获得响应,并已学会投射第一个节点:

http.service.ts代码段

getTreeData(): Observable<Leaf>{  
    var headers = new Headers();
    headers.append('Content-Type', 'application/json');
    return this.http.post('http://localhost:8000/',{ headers: headers ...})
        .map(res =>new Leaf(res.json()));//maybe I could do something here?
}
getTreeData():可观察的{
var headers=新的headers();
headers.append('Content-Type','application/json');
返回此.http.post('http://localhost:8000/“,{headers:headers…})
.map(res=>newleaf(res.json());//也许我可以在这里做点什么?
}
这是我的叶类,以防万一:

Leaf.ts

export class Leaf{
    name: string;
    state: string;
    treeData: Array<Leaf>;


    constructor(input:any){
        this.name = input.name;
        this.state = input.state;
        this.treeData = input.children;
    }

    toggleState() {
        if (this.state=='active'){
            this.state = 'inactive';
        }
        else {
            this.state = 'active'
        }
    }
}
导出类叶{
名称:字符串;
状态:字符串;
treeData:数组;
构造函数(输入:任意){
this.name=input.name;
this.state=input.state;
this.treeData=input.children;
}
切换状态(){
if(this.state=='active'){
this.state='inactive';
}
否则{
this.state='active'
}
}
}

我的最终目标是获取json树并以文件夹树格式表示它们。有没有一种方法可以使用map()遍历所有节点或map()与某种遍历器的组合?

我首先为json数据创建一个接口:

interface LeafJson {
    name: string;
    state: string;
    children?: LeafJson[];
}
然后使用Array.map创建子项:

export class Leaf {
    name: string;
    state: string;
    treeData: Array<Leaf>;

    constructor(input: LeafJson){
        this.name = input.name;
        this.state = input.state;
        this.treeData = input.children ? input.children.map(item => new Leaf(item)) : [];
    }

    toggleState() {
        if (this.state=='active'){
            this.state = 'inactive';
        } else {
            this.state = 'active'
        }
    }
}
导出类叶{
名称:字符串;
状态:字符串;
treeData:数组;
构造函数(输入:LeafJson){
this.name=input.name;
this.state=input.state;
this.treeData=input.children?input.children.map(item=>newleaf(item)):[];
}
切换状态(){
if(this.state=='active'){
this.state='inactive';
}否则{
this.state='active'
}
}
}

()

可能的重复我已经看到了这个问题,但我这里的问题是如何处理嵌套树和数据的递归性质。虽然我认为这两个问题之间有一些重叠,但我的问题是询问一些特定于嵌套树的内容,而另一个问题则更广泛地涉及到json。谢谢你!感谢直到我从类定义中删除了
export
(出现了一个奇怪的浏览器错误)之后,这才为我运行。否则,谢谢你的回答~@AdamHughes是的,以防你使用模块系统,作为OP。