Tengo 2 clases que representan una estructura de árbol de la siguiente manera:
class Node { private _id: string; name: string; parent?: Node; children: Node[]; } class Tree { root: Node; treeMap: Map<string, Node>; } Estoy escribiendo una api GET /tree que debería devolver el árbol json de la siguiente manera:
[ { "1": { "name": "root", "children": [ { "2": { "name": "fish", "children": [] // empty children } }, { "3": { "name": "bird", "children": [ ...<any children>... ] } } ] } } ] cuando hago ctx.body = tree esto es lo que devuelve la API:
{ "root": { "_id": "1", "name": "root", "children": [ { "_id": "2", "name": "fish", "children": [] }, { "_id": "3", "name": "bird", "children": [] } ] }, "treeNodeMap": {} }¿Cuál sería la forma correcta de convertirlo al formato json deseado?
Haga que sus clases implementen toJSON() para producir la estructura de datos que desea.
// Define the data structure interface SerialisedNode { [id: string]: { name: string; children: SerialisedNode[] } } class Node { private _id: string; name: string; parent?: Node; children: Node[]; toJSON(): SerialisedNode { return { [ this._id ]: { name: this.name, children: this.children.map(node => node.toJSON()) } } } } class Tree { root: Node; treeMap: Map<string, Node>; toJSON(): SerialisedNode { return this.root.toJSON(); } } Cuando su Tree (o cualquier Node ) se clasifica como JSON, la transformación se activará y entregará la estructura de datos alternativa.