Home > Net >  TypeScript convert json structure
TypeScript convert json structure

Time:11-28

I cant figure out how to make this conversion iterating a json. I have this pojo in my backend:

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:

[{
        "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:

{
    "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[]

Thanks!!!

CodePudding user response:

Its just a simple conversion by a 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));
  • Related