Quantcast
Viewing all articles
Browse latest Browse all 207

Create JSON object from recursive tree structure

Having this simple many-to-many self-referential structure.
An item owns other items through the joins table:

CREATE TABLE items (  item_id   serial PRIMARY KEY, title     text);CREATE TABLE joins (  id        serial PRIMARY KEY, item_id   int, child_id  int);INSERT INTO items (item_id, title) VALUES  (1, 'PARENT'), (2, 'LEVEL 2'), (3, 'LEVEL 3.1'), (4, 'LEVEL 4.1'), (5, 'LEVEL 4.2'), (6, 'LEVEL 3.2');INSERT INTO joins (item_id, child_id) VALUES  (1, 2), (2, 3), (3, 4), (3, 5), (2, 6);

db<>fiddle here

I am trying to retrieve a whole tree structure as JSON for a given item.
For example, to query the item with item_id 1 (pseudo-code):

SELECT i.*, fulltree from items i where item_id = 1;

Desired output for fulltree:

{  id: 1,  title: "PARENT",  children: [   {     id: 2,     title: "LEVEL 2",     children: [      {        id: 3,        title: "LEVEL 3.1",        children: [          {            id: 4,            title: "LEVEL 4.1"          },          {            id: 5,            title: "LEVEL 4.2"          }        ]      },      {        id: 6,        title: "LEVEL 3.2"      }     ]   }  ]}

After digging into the JSON capabilities Postgres offers, I managed such output by repeating a nested query. Simple but ugly, and limited to the amount of repeats. :/

I've found out about recursive queries. The examples found here and there are not that simple. It's hard to finding an entrypoint to understanding the technique and adapt it to my needs.

I hope the example here will be simple enough to find help from experienced users.


Viewing all articles
Browse latest Browse all 207

Trending Articles