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

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

如何將sql輸出格式化為json

如何將sql輸出格式化為json

Go
精慕HU 2021-12-06 18:36:04
我有一個查詢數據庫并返回兩列的 Go 函數:var colA stringvar colB string    err = db.QueryRow("select colA, colB from table where colA = %v", 1).Scan(&colA,&colB)    if err != nil {        fmt.Printf(err.Error())    }    fmt.Println(colA,colB)    return nil我想以 json 格式返回輸出,如 {colA:colB}。我玩過 json.Marshal 函數,但無法正常工作。
查看完整描述

3 回答

?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

如果您知道您的數據將是什么,您可以創建一個結構:例如


type User struct {

    Username string `json:"username"`

    Email    string `json:"email"`

}

然后在您的查詢中:


user := User{}

err = db.QueryRow("select colA, colB from table where colA = %v", 1).Scan(&user.Username,&user.Email)

    if err != nil {

        fmt.Printf(err.Error())

}

然后調用 marshal 就可以了


msg, err := json.Marshal(user)

if err != nil {

    log.Println(err)

}


fmt.Println(string(msg)) // "{ "username": "Blah", "email": "[email protected]" }"

另外隨著json.Marshal包,如果你調用Marshal在struct你的領域必須使用的字段名,例如首都首字母出口Username


// 此包忽略字段。字段整數json:"-"


// 字段在 JSON 中顯示為鍵“myName”。字段整數json:"myName"


// 字段在 JSON 中顯示為鍵 "myName" 并且 // 如果該字段的值為空,則該字段將從對象中省略, // 如上所述。字段整數 json:"myName,omitempty"


// 字段在 JSON 中顯示為鍵“Field”(默認值),但 // 如果為空,則跳過該字段。// 注意前導逗號。字段整數 json:",omitempty"


https://golang.org/pkg/encoding/json/#Marshal


查看完整回答
反對 回復 2021-12-06
?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

您可以創建一個單元素映射并對其進行編組:


m := map[string]string{colA: colB}

b, err := json.Marshal(m)

完整示例:https : //play.golang.org/p/ntT5h3oHvY


查看完整回答
反對 回復 2021-12-06
?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

這是一個完整的示例:


campaign.model.go:


package models


import "database/sql"


// Campaign Model

type Campaign struct {

    CampaignId int `db:"campaign_id" json:"campaignId"`

    CampaignNme string `db:"campaign_nme" json:"campaignNme"`

    OrganizationId sql.NullInt64 `db:"organization_id" json:"organizationId"`

}

campaign.repository.go:


package repositories


import (

    "github.com/jmoiron/sqlx"

    "go-clean-arch/domain/models"

    "go-clean-arch/domain/repositories"

)


type CampaignRepository struct {

    Db *sqlx.DB

}


func NewCampaignRepository(Db *sqlx.DB) repositories.CampaignRepository {

    return &CampaignRepository{Db}

}


func (cr *CampaignRepository)FindById(id string) (models.Campaign, error) {

    campaign := models.Campaign{}

    query := `

        SELECT

            campaign_id,

            campaign_nme,

            organization_id

        FROM "CAMPAIGN" WHERE campaign_id = $1

    `

    err := cr.Db.Get(&campaign, query, id)

    if err != nil {

        return campaign, err

    }

    return campaign, nil

}

main.go:


func main() {

    dbConf := database.PGDatabaseConfig{

        Host: viper.GetString("SQL_HOST"),

        Port: viper.GetString("SQL_PORT"),

        User: viper.GetString("SQL_USER"),

        Password: viper.GetString("SQL_PASSWORD"),

        Dbname: viper.GetString("SQL_DB"),

    }

    db, err := database.ConnectPGDatabase(&dbConf)

    if err != nil {

        log.Fatal(err)

    }


    defer func () {

        if err := recover(); err != nil {

            fmt.Println(err)

        }

    }()


    //userRepository := repositories.NewUserRepository(db)

    //users, _ := userRepository.FindAll()

    //fmt.Printf("%#v", &users)


    campaignRepository := repositories.NewCampaignRepository(db)

    campaign, err := campaignRepository.FindById("102")

    if err != nil {

        panic(err)

    }

    fmt.Printf("%#v", campaign)

    campaignJSON, err := json.Marshal(campaign)

    if err != nil {

        panic(err)

    }

    fmt.Println(string(campaignJSON))


}

輸出:


?  go-clean-arch [master] ?  go run main.go

models.Campaign{CampaignId:102, CampaignNme:"Generic Party / Memories", OrganizationId:sql.NullInt64{Int64:0, Valid:false}}

campaignJSON: {"campaignId":102,"campaignNme":"Generic Party / Memories","organizationId":{"Int64":0,"Valid":false}}


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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