亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何解析層級數據

如何解析層級數據

Go
ABOUTYOU 2023-06-12 17:01:34
在 Oracle 中,我有這樣的表:| organization_id | ogranization_name | parent_id | level ||-----------------|-------------------|-----------|-------|| 1               | Facebook          |           | 0     || 2               | Instagram         | 1         | 1     || 3               | Whatsapp          | 1         | 1     || 4               | Dynamic           | 2         | 2     || 5               | Google            |           | 0     |此表顯示組織的層次結構。我需要在我的 Go 應用程序中創建一個樹狀嵌套的 JSON 響應:[    {        "organization_id": 1        "ogranization_name": "Facebook",        "childs": [            {                "organization_id": 2,                "ogranization_name": "Instagram",                "childs": null            },            {                "organization_id": 3,                "ogranization_name": "Whatsapp",                "childs": [                    {                        "organization_id": 4,                        "ogranization_name": "Dynamic",                        "childs": null                    }                ]            }        ]    },    {        "organization_id": 5        "ogranization_name": "Google",        "childs": null    }]我查詢 Oracle 數據庫。我也創建結構。我的問題是如何知道一個組織是否有孩子?主要去:type Organisation struct {    ID       int            `json:"organization_id"`    Name     string         `json:"ogranization_name"`    Children []Organisation `json:"childs"`}rows,err := db.Query("select * from ORG_TABLE")if err != nil {    fmt.Println(err)    return}var organizations []Organizationfor rows.Next() {    var organization Organization    err = rows.Scan(&organization.ID, &organization.Name, ???)    if err != nil {        fmt.Println(err)        return    }}organizations = append(organizations, organization)
查看完整描述

1 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

最后,我找到了解決方案:


package main


import (

    "database/sql"

    "encoding/json"

    "fmt"

    "log"

    "sort"


    _ "github.com/mattn/go-sqlite3"

)


type Organization struct {

    ID       int             `json:"organization_id"`

    Name     string          `json:"organization_name"`

    Rang     int             `json:"organization_rang"`

    Children []*Organization `json:"children"`

}


func main() {

    db, err := sql.Open("sqlite3", "./database")

    if err != nil {

        log.Fatal(err)

    }


    defer db.Close()


    rows, err := db.Query("select ORGANIZATION_ID,ORGANIZATION_NAME,ORGANIZATION_RANG,PARENT_ORGANIZATION_ID from ORG")

    if err != nil {

        log.Fatal(err)

    }


    defer rows.Close()


    orgs := map[int]*Organization{}


    for rows.Next() {

        organization := &Organization{}

        var parentID sql.NullInt64


        if err = rows.Scan(&organization.ID, &organization.Name, &organization.Rang, &parentID); err != nil {

            log.Fatal(err)

        }


        if parentID.Valid {

            if parentOrg, ok := orgs[int(parentID.Int64)]; ok {

                parentOrg.Children = append(parentOrg.Children, organization)

            } else {

                orgs[int(parentID.Int64)] = &Organization{ID: int(parentID.Int64)}

                orgs[int(parentID.Int64)].Children = append(orgs[int(parentID.Int64)].Children, organization)

            }

        }


        if _, ok := orgs[organization.ID]; ok {

            orgs[organization.ID].Name = organization.Name

            orgs[organization.ID].Rang = organization.Rang

            continue

        }


        orgs[organization.ID] = organization

    }


    IDs := []int{}

    for k := range orgs {

        IDs = append(IDs, k)

    }

    sort.Ints(IDs)


    organizations := []Organization{}

    for _, ID := range IDs {

        if len(orgs[ID].Children) > 0 && orgs[ID].Rang == 1 {

            organizations = append(organizations, *orgs[ID])

        }

    }


    content, err := json.MarshalIndent(organizations, "", "  ")

    if err != nil {

        log.Fatal(err)

    }


    fmt.Println(string(content))

}



查看完整回答
反對 回復 2023-06-12
  • 1 回答
  • 0 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號