Создать родительский дочерний JSON в Go с Mysql - PullRequest
0 голосов
/ 26 сентября 2018

Я использую базу данных mysql с golang (go).Ниже моя структура базы данных для дерева

ScreenID        ParentID        ScreenName

1                0               Home

2                0               Run Records

3                0               Requests

4                3               NDR

5                4               Add NDR Request

Структура, которую я использую:

type Screens struct {
    ProductID int
    ParentID   int
    ScreenName string
    Children []Screens
}

Ниже мой код golang

db, err := sql.Open("mysql", username + ":" + password + "@tcp(127.0.0.1:3306)/" + dbName)

rows, err := db.Query("call usp_select_screens(1)")

for rows.Next() {
err := rows.Scan(&screens.ProductID, &screens.ParentID, &screens.ScreenName)

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

[  
     {  
        "ParentId":"0",
        "ScreenId":"1",
        "Name":"Home"
    },
    {  
        "ParentId":"0",
        "ScreenId":"2",
        "Name":"Run Records"
    },
    {  
        "ParentId":"0",
        "ScreenId":"3",
        "Name":"Requests",
        "Children":[  
            {  
                "Name":"NDR",
                "ScreenId":"4",
                "ParentId":"3",
                "Children":[  
                    {  
                        "Name":"Add NDR Request",
                        "ScreenId":"5",
                        "ParentId":"4"
                    }
                ]
            }
        ]
    }
]

1 Ответ

0 голосов
/ 26 сентября 2018

Обычно я назначаю флаги для структуры, а затем вы легко можете использовать json.Marshal для преобразования структуры в формат json.

Обновите вашу структуру до чего-то вроде:

type Screens struct {
    ParentID int      `json:"ParentId" db:"ParentID"`
    ScreenID int      `json:"ScreenId" db:"ScreenID"`
    Name     string   `json:"Name" db:"ScreenName"`
    Children []Screens `json:"Children,omitempty"`
}

Затемсканировать данные в структуру: (не проверено)

for rows.Next() {
    if err := rows.Scan(&screens); err != nil {
        // break and handle err
    }
} 

Затем преобразовать в JSON:

s, err := json.Marshal(screens)
if err != nil {
    // handle error
}
fmt.Println(string(s))

Результат:

{"ParentId":0,"ScreenId":2,"Name":"Home","Children":[{"ParentId":3,"ScreenId":4,"Name":"NDR"}]}

Go Playground - https://play.golang.org/p/KgpC7tFJ_hR

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