Создание структуры каталогов в формате JSON для использования виджетом дерева Webix

Я работаю над проектом с использованием Webix и Python / Flask, и я наткнулся на кирпичную стену с рендерингом виджета treeview. Моя проблема заключается в правильном построении JSON, необходимого для виджета. Я пытаюсь создать структуру каталогов для данного примера:

Состав:

.
├── dirone
│   └── file
├── dirthree
│   ├── somedir
│   │   └── anotherfile
│   └── somefile
├── dirtwo
└── somefile

Желаемый результат:

[
    {
        "value": "dirone",
        "path": "dirone",
        "type": "folder",
        "children": [
            {
                "value": "file",
                "path": "dirone/file",
                "type": "file"
            }
        ]
    },
    {
        "value": "dirtwo",
        "path": "dirtwo",
        "type": "folder",
        "children": []
    },
    {
        "value": "dirthree",
        "path": "dirthree",
        "type": "folder",
        "children": [
            {
                "value": "somefile",
                "path": "dirthree/somefile",
                "type": "file"
            },
            {
                "value": "somedire",
                "path": "dirone/file",
                "type": "folder",
                "children": [
                    {
                        "value": "anotherfile",
                        "path": "dirthree/somedir/anotherfile",
                        "type": "file"
                    }
                ]
            }
        ]
    },
    {
        "value": "somefile",
        "path": "somefile",
        "type": "file"
    }
]

Я бился головой об это последние два часа, пытаясь найти метод, который мог бы это отобразить. Есть ли у кого-нибудь метод, который генерирует структуру? Любая помощь будет оценена!


person user1777667    schedule 19.03.2015    source источник


Ответы (2)


На самом деле это не решение, но виджеты Webix можно настроить для использования json с другой структурой или, в случае или дерева, загрузить простой список записей данных и построить древовидную структуру, группируя данные по некоторому параметру.

Например, проверьте http://docs.webix.com/samples/17_datatree/01_loading/07_load_group.html

person Aquatic    schedule 20.03.2015
comment
Круто, пригодится. Я пытаюсь отойти от PyQt; все еще пытаюсь разобраться в некоторых фреймворках виджетов js. - person user1777667; 21.03.2015

Я думаю, что получил то, что мне нужно, без os.walk (), но я все еще делаю это с помощью рекурсивной функции (boo):

def pathTree(path,id=0):
    id += 1
        tree = {'value': os.path.basename(path)}
        tree['path'] = path
    tree['id'] = id
        if os.path.isdir(path):
            tree['type'] = "folder"
            tree['data'] = [pathTree(os.path.join(path,x),id) for x in os.listdir(path)]
    else:
            tree['type'] = "file"
    return(tree)

Единственное, что я действительно хочу сейчас (хотя пока не совсем выгодно), - это чтобы он записывал уровень / глубину.

Спасибо за предложения!

person user1777667    schedule 20.03.2015