第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 JSON 響應(yīng)中省略結(jié)構(gòu)字段

在 JSON 響應(yīng)中省略結(jié)構(gòu)字段

Go
三國(guó)紛爭(zhēng) 2022-06-27 11:00:23
我有一個(gè)包含一些字段的結(jié)構(gòu),如下所示:type Test struct {    ID        int          `json:"id"`    Active    bool         `json:"active"`    Object    []obj.Object `json:"objects"`}然后是一些將測(cè)試對(duì)象編碼為 JSON 作為響應(yīng)的處理函數(shù),但在其中一個(gè)函數(shù)中,我想省略響應(yīng)中的最后一個(gè)字段“對(duì)象”。我知道json:"-"省略了它,但問題是我需要該字段用于其他功能。我將對(duì)象編碼為 JSON 的方式是使用這種方法: json.NewEncoder(w).Encode(t)有沒有辦法我可以做到這一點(diǎn)?提前致謝!
查看完整描述

3 回答

?
繁星coding

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以將 omitempty 標(biāo)記與指針結(jié)構(gòu)一起使用。在這種情況下,如果指針為零,則不會(huì)編組字段。(https://play.golang.org/p/7DihRGmW0jZ) 例如


package main


import (

    "encoding/json"

    "fmt"

)


type Test struct {

        ID          *int          `json:"id,omitempty"`

        Active      *bool         `json:"active,omitempty"`

        Object      *interface{}  `json:"objects,omitempty"`

}


func main() {

    var result Test

    id:= 1

    active := true


    result.ID = &id

    result.Active = &active

    

    b, err := json.Marshal(result)

    if err != nil {

        panic(err)

    }

    fmt.Printf("%s\n", b)

}


查看完整回答
反對(duì) 回復(fù) 2022-06-27
?
嚕嚕噠

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊

使用的解決方案omitempty通常是最簡(jiǎn)單的,但這里有一個(gè)替代解決方案,可用于更復(fù)雜的場(chǎng)景。這利用了這樣一個(gè)事實(shí),即只要結(jié)構(gòu)相同,即使標(biāo)簽不同,值也可以轉(zhuǎn)換為另一種類型:https : //play.golang.org/p/ZT6gbhsXxmD


type Test struct {

    ID     int      `json:"id"`

    Active bool     `json:"active"`

    Object []Object `json:"objects,omitempty"`

}


type Test2 struct {

    ID     int      `json:"id"`

    Active bool     `json:"active"`

    Object []Object `json:"-"`

}


func main() {

    var t Test

    t.ID = 1

    t.Active = true

    t.Object = make([]Object, 1)

    fmt.Println("Test:")

    json.NewEncoder(os.Stdout).Encode(t)

    fmt.Println("Test2:")

    t2 := Test2(t)

    json.NewEncoder(os.Stdout).Encode(&t2)

}

這在很多情況下都很有用,例如,您不想在發(fā)送到 JSON 之前從字段中刪除值,或者您有更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。


查看完整回答
反對(duì) 回復(fù) 2022-06-27
?
交互式愛情

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊

省略值的簡(jiǎn)單方法是使用omitemptyjson 的標(biāo)簽并編寫一個(gè)返回對(duì)象的方法,如下所示:


package main


import (

    "encoding/json"

    "fmt"

    "os"

)


type Test struct {

    ID     int      `json:"id"`

    Active bool     `json:"active"`

    Object []Object `json:"objects,omitempty"`

}


type Object struct {

    TEMP string

}


func (t Test) getData() Test {

    return Test{ID: t.ID, Active: t.Active}

}


func main() {

    var t Test

    t.ID = 1

    t.Active = true

    t.Object = make([]Object, 1)

    fmt.Println(t)

    fmt.Println(t.getData())

    json.NewEncoder(os.Stdout).Encode(t)

    fmt.Println("--------")

    json.NewEncoder(os.Stdout).Encode(t.getData())

}


結(jié)果如下:


{1 true [{}]}

{1 true}

{"id":1,"active":true,"objects":[{"TEMP":""}]}

--------

{"id":1,"active":true}


查看完整回答
反對(duì) 回復(fù) 2022-06-27
  • 3 回答
  • 0 關(guān)注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)