Javascript 如何将嵌套JSON树的所有节点强制转换为angular 2 Typescript中类的实例?
我有一个名为Leaf的类,我想让json响应的所有节点都成为Leaf的实例。 json响应如下所示: JSON响应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"
{
"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。