Преобразование таблицы базы данных postgresql в json tree python - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть таблица базы данных с рекурсивным отношением:

enter image description here

Мне нужно преобразовать вышеуказанные данные в формат JSON, чтобы они могли вписаться в ng2-tree:

{
    value: 1,
    data: "d1"
    children: [
      {
        value: '2',
        data: "d2"
        children: [
          {value: 3,
           data: "d3",
           children: [
            value: 4,
           data: "d4",
           children : []
           ]},
          {value: 6, data: "d6", children: []}
        ]
      },
      {
        value: '5',
        data: "d5"
        children: [
        ]
      }
    ]
  }

Я пробовал различные реализации, включая создание дерева с использованием ребер из таблицы выше, а затем создание структуры json с использованием рекурсии, но у меня возникли проблемы с добавлением значения данных в результирующий json.

Я использую python2 для написания следующего кода, любая помощь приветствуется.

1 Ответ

0 голосов
/ 27 ноября 2018

Вы можете использовать рекурсию:

import sqlite3
data = list(sqlite3.connect('filename.db').cursor().execute("SELECT * FROM tablename"))
#[[1, 'None', 'd1'], [2, 1, 'd2'], [3, 2, 'd3'], [4, 3, 'd4'], [5, 1, 'd5'], [6, 2, 'd6']]
def group_vals(_start):
  return [{'value':a, 'data':c, 'children':group_vals(a)} for a, b, c in data if b == _start]

[[val, _data]] = [[a, c] for a, b, c in data if b == 'None']
new_result = {'value':val, 'data':_data, 'children':group_vals(val)}

Вывод:

{
   "value": 1,
   "data": "d1",
   "children": [
     {
        "value": 2,
        "data": "d2",
        "children": [
            {
                "value": 3,
                "data": "d3",
                "children": [
                    {
                        "value": 4,
                        "data": "d4",
                        "children": []
                    }
                ]
            },
            {
                "value": 6,
                "data": "d6",
                "children": []
            }
        ]
      },
      {
        "value": 5,
        "data": "d5",
        "children": []
     }
  ] 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...