การสร้าง 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