簡體   English   中英

GORM 在 JSON 響應中省略字段

[英]GORM omit fields in a JSON Response

我想在我的 JSON 響應中省略一些字段。 目前我有一個類型接收器,它返回一個新的 struct userToJson 然后我將它傳遞給json.NewEncoder() 但是我想知道這是否是使用 GORM 省略字段的最佳方法。

預先感謝您!

package server

import (
    "gorm.io/gorm"
)

type User struct {
    gorm.Model
    FirstName string `gorm:"not null;default:null"`
    LastName  string `gorm:"not null;default:null"`
    Email     string `gorm:"not null;default:null;unique"`
    Password  string `gorm:"not null;default:null"`
    Posts     []Posts
}
type userToJson struct {
    Email string
    Posts []Posts
}

func (u *User) toJson() userToJson {
    return userToJson{
        Email: u.Email,
        Posts: u.Posts,
    }
}

另一種方法是為您的類型實現接口Marshaler以修改編組到 JSON 的工作方式。 json包在編組之前檢查該接口,如果存在,則調用該函數。 這是標准庫的接口。

type Marshaler interface {
    MarshalJSON() ([]byte, error)
}

您的User類型的一個示例實現如下。

func (u *User) MarshalJSON() ([]byte, error) {
    type Temp struct {
        Email string
        Posts []Post
    }

    t := Temp{
        Email: u.Email,
        Posts: u.Posts,
    }
    return json.Marshal(&t)
}

您應該為所有字段聲明一個帶有 json 標記的結構,Behrooz 在評論中建議的內容應該可以正常工作

type User struct {
    gorm.Model
    FirstName string `json:"-" gorm:"not null;default:null"`
    LastName  string `json:"-" gorm:"not null;default:null"`
    Email     string `json:"email" gorm:"not null;default:null;unique"`
    Password  string `json:"-" gorm:"not null;default:null"`
    Posts     []Posts`json:"posts"`
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM