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

TA貢獻1799條經驗 獲得超9個贊
您可以創建一個單元素映射并對其進行編組:
m := map[string]string{colA: colB}
b, err := json.Marshal(m)
完整示例:https : //play.golang.org/p/ntT5h3oHvY

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}}
- 3 回答
- 0 關注
- 362 瀏覽
添加回答
舉報