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

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

如何檢查post請求中的json.body中是否有空值

如何檢查post請求中的json.body中是否有空值

Go
繁星淼淼 2022-04-26 16:01:07
我有一個包含 4 個字段的結(jié)構(gòu):type Animal struct {    Name string    Age  int    Zone int}我正在發(fā)送一個發(fā)送 json 對象以解碼為結(jié)構(gòu)的 post 請求,json 應(yīng)該如下所示:{"Age":10,"Name":"Lion", "Zone":1,}我希望所有字段都是字段,但是當(dāng)我不填寫所有字段并發(fā)送一些 json 之類的時候。{"Age":10,"Zone":1,}json.Decoder 自動構(gòu)建該 Filed 并將其設(shè)置為""(該類型的零值)而不是 null。如何設(shè)置 null 值或檢查它是否為 null 并生成錯誤?我希望結(jié)果是{Age:10, Zone:1, Name:null}或至少會產(chǎn)生錯誤!這是我用來將 json 轉(zhuǎn)換為 struct 的代碼animalModel := Animal{}err := json.NewDecoder(r.Body).Decode(&animalModel)
查看完整描述

2 回答

?
呼喚遠(yuǎn)方

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個贊

string不能為零。如果您想?yún)^(qū)分缺席字段、null值和空值"",您可以使用以下選項(xiàng):


作為一種快速解決方案,您可以使用指針:

type Animal struct {

Name *string

}

缺點(diǎn)是您需要使用時間變量來設(shè)置此字段。


更靈活的解決方案是實(shí)現(xiàn)UnmarshalerAnimal 結(jié)構(gòu)的接口并使用 temporalmap[string]string進(jìn)行所需的檢查并返回錯誤:

type Animal struct {

Name string

}


func (a *Animal) UnmarshalJSON(data []byte) error {

  m := map[string]interface{}{}

  err := json.Unmarshal(data, &m)

  if err != nil {

    return err

  }

  // check if field is exist

  name, exist := m["name"]

  if !exist {

    return fmt.Errorf("field 'name' should be present")

  }

  // check other fields...

  // ...


  // if all fields are ok, you can:

  // 1. set fields from map items

  a.Name = name

  ...


  // 2. call Unmarshal

  return json.Unmarshal(data, a)

}

這里的缺點(diǎn)是您需要“手動”檢查每個字段。


下一步是使用重型機(jī)械:go-swagger或go-openapi。這些工具使您能夠使用聲明性模式 (OpenAPI) 對 JSON 數(shù)據(jù)執(zhí)行檢查,您可以輕松實(shí)現(xiàn)版本控制、發(fā)布 API 等等。當(dāng)然,對于 3 字段結(jié)構(gòu)來說,它是過度工程化的。


查看完整回答
反對 回復(fù) 2022-04-26
?
滄海一幻覺

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個贊

您可以使用指針


type Animal struct {

    Name *string

    Age  int

    Zone int

}

或包裹


import "github.com/guregu/null"


type Animal struct {

    Name null.String

    Age  int

    Zone int

}


查看完整回答
反對 回復(fù) 2022-04-26
  • 2 回答
  • 0 關(guān)注
  • 263 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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