Golang Преобразование фрагмента URL в JSON Дерево сайта - PullRequest
0 голосов
/ 09 марта 2020

У меня есть список URL-адресов, которые мне нужно преобразовать в древовидную структуру JSON. До сих пор я пробовал несколько разных способов и не смог вообще. В настоящее время я пытаюсь преобразовать этот алгоритм в Golang, но он ничего не делает, я застрял в их логах c, мое преобразование в golang некорректно, и я застрял.

дерево. go

package tree

import (
    "fmt"
)

type TreeNode struct {
    Path     string     `json:"path"`
    Children []TreeNode `json:"children"`
}

urls := []string{
"fenceprosc.com/hello-world/#respond",
"fenceprosc.com/199-2/12615753_1208442715850011_4650003168465028857_o/#respond",
"fenceprosc.com/199-2/28339_127294957298131_7361568_n/#main",
"fenceprosc.com/199-2/10917425_1025362007491417_2370903639534256456_n/#main",
"fenceprosc.com/199-2/vinyl-gate-2/#main",
"fenceprosc.com/199-2/vinyl-gate1/#main",
}

func GetTheParentNodeChildArray(path string, treeNodes *[]TreeNode) []TreeNode {
    for _, treeNode := range *treeNodes {
        if len(treeNode.Children) > 0 {
            var possibleParent = false

            for _, node := range treeNode.Children {
                // What do I do here???
                fmt.Println("node::", node)
            }

            if possibleParent {
                return GetTheParentNodeChildArray(path, &treeNode.Children)
            }
        }
    }

    return *treeNodes
}

// Add an item node in the tree, at the right position
func addToTree(node TreeNode, treeNodes *[]TreeNode) {
    parentNodeArr := GetTheParentNodeChildArray(node.Path, treeNodes)
    fmt.Println("parentNodeArr", parentNodeArr)
    if parentNodeArr == nil {
        parentNodeArr = *treeNodes
    }

    parentNodeArr = append(parentNodeArr, TreeNode{
        Path: node.Path,
    })
}

//Create the item tree starting from urls
func createTree(nodes []TreeNode) []TreeNode {
    var tree []TreeNode
    for _, node := range nodes {
        addToTree(node, &tree)
    }

    return tree
}

func BuildTree(urls []string) []string {
    //tree := &TreeNode{
    //  Path:     "/",
    //  Children: []TreeNode{},
    //}

    var data []TreeNode
    for _, u := range urls {
        node := TreeNode{
            Path: u,
        }

        data = append(data, node)
    }

    tree := createTree(data)
    fmt.Println("tree::", tree)
    return urls
}

Я также полностью открыт для любого другого решения, у меня нет вложений в этот алгоритм. Просто трудно понять, как построить их в дереве.

1 Ответ

0 голосов
/ 09 марта 2020

Нашел рабочее решение здесь: Получите древовидную структуру из строки пути

Это было действительно так просто реализовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...