PostgreSQL Ltree в JSON - PullRequest
       34

PostgreSQL Ltree в JSON

1 голос
/ 06 апреля 2019

Я экспериментировал с расширением PostgreSQL Ltree. Я хотел бы использовать его для хранения данных иерархического списка дел (то есть списков с подсписками). Это работает хорошо, но потратив немало времени, я все еще не могу найти хороший способ извлечь информацию из базы данных в иерархическом формате JSON. Вот пример того, чего я хотел бы достичь:

 id |        content         | position | parent_id | parent_path 
----+------------------------+-----------+----------+-------------+
  1 | Fix lecture notes.     |        1 |           | root
  2 | Sort out red folder.   |        1 |         1 | root.1
  3 | Order files.           |        1 |         2 | root.1.2
  4 | Label topics.          |        2 |         2 | root.1.2
  5 | Sort out blue folder.  |        2 |         1 | root.1
  6 | Look for jobs.         |        2 |           | root

От этого к выводу json ниже:

[
   {
      "id":1,
      "content":"Fix lecture notes.",
      "position":1,
      "parent_id":null,
      "parent_path":"root",
      "children":[
         {
            "id":2,
            "content":"Sort out red folder.",
            "position":1,
            "parent_id":1,
            "parent_path":"root.1",
            "children":[
               {
                  "id":3,
                  "content":"Order files.",
                  "position":1,
                  "parent_id":2,
                  "parent_path":"root.1.2",
                  "children":[]
               },
               {
                  "id":4,
                  "content":"Label topics.",
                  "position":2,
                  "parent_id":2,
                  "parent_path":"root.1.2",
                  "children":[]
               }
            ]
         },
         {
            "id":2,
            "content":"Sort out blue folder.",
            "position":2,
            "parent_id":1,
            "parent_path":"root.1",
            "children":[]
         }
      ]
   },
   {
      "id":1,
      "content":"Look for jobs.",
      "position":1,
      "parent_id":null,
      "parent_path":"root",
      "children":[]
   }
]

Есть ли какой-нибудь изящный способ сделать это, возможно, на стороне сервера Python? Ищите идеи действительно!

...