简体   繁体   English

TypeScript转换json结构

[英]TypeScript convert json structure

I cant figure out how to make this conversion iterating a json.我不知道如何使这种转换迭代 json。 I have this pojo in my backend:我的后端有这个 pojo:

class Part{
  Long id;
  String name;
  Set<Part> parts = new HashSet<>();
}

Every part can have parts and this part more parts and so on.每个部分都可以有部分,这个部分可以有更多的部分,依此类推。

I get this parts from httpclient in angular and get this json:我从 angular 中的 httpclient 获得这些部件并得到这个 json:

[{
        "id": 1,
        "name": "Parts A and B",
        "parts": [{
                "id": 2,
                "name": "A",
                "parts": [{
                    "id": 4,
                    "name": "A1",
                    "parts": []
                }]
            },
            {
                "id": 3,
                "name": "B",
                "parts": []
            }
        ]
    },
    {
        "id": 2,
        "name": "A",
        "parts": []
    },
    {
        "id": 3,
        "name": "B",
        "parts": []
    },
    {
        "id": 4,
        "name": "A1",
        "parts": []
    }
]

And need to convert to this to populate a PrimeNG TreeTable:并且需要转换为这个来填充 PrimeNG TreeTable:

{
    "data": [{
            "data": {
                "name": "Parts A and B",
                "id": "1"
            },
            "children": [{
                    "data": {
                        "name": "Part A",
                        "id": "2"
                    },
                    "children": [{
                        "data": {
                            "name": "A1",
                            "id": "4"
                        }
                    }]
                },
                {
                    "data": {
                        "name": "Part B",
                        "id": "3"
                    },
                    "children": []
                }
            ]
        },
        {
            "data": {
                "name": "Part A",
                "id": "2"
            },
            "children": []
        },
        {
            "data": {
                "name": "Part B",
                "id": "3"
            },
            "children": []
        },
        {
            "data": {
                "name": "A1",
                "id": "4"
            },
            "children": []
        }
    ]
}

How can I do that?我怎样才能做到这一点? In angular I get this in an array parts: Part[] and need partsTree: TreeNode[]在 angular 中,我在数组中得到它: Part[] 并需要 partsTree: TreeNode[]

Thanks!!!谢谢!!!

Its just a simple conversion by a map;它只是 map 的简单转换;

    interface PartAPI{
  id: number;
    name: string;
   parts : PartAPI[];
}

interface Data {
   id: number;
    name: string;   
} 

interface Part {
     data : Data;
     children : Part[];
}


console.log('a')


let convert = (inputArr: PartAPI[] = []) : Part[] => {

 return inputArr.map(partApi =>  ({ data : { id : partApi.id , name : partApi.name }, children: convert(partApi.parts)   }) as Part)

}




let data : PartAPI[] = [{
    "id": 1,
    "name": "Parts A and B",
    "parts": [{
        "id": 2,
        "name": "A",
        "parts": [{
          "id": 4,
          "name": "A1",
          "parts": []
        }]
      },
      {
        "id": 3,
        "name": "B",
        "parts": []
      }
    ]
  },
  {
    "id": 2,
    "name": "A",
    "parts": []
  },
  {
    "id": 3,
    "name": "B",
    "parts": []
  },
  {
    "id": 4,
    "name": "A1",
    "parts": []
  }
]

console.log(convert(data));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM