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

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

解組 json 字段是 int 或 string

解組 json 字段是 int 或 string

Go
人到中年有點(diǎn)甜 2023-06-19 17:45:25
我有一個(gè)類型是的應(yīng)用程序type Person struct {  Name string `json:"name"`  Age  int    `json:"age"`}但是我們有舊客戶端將Age字段作為字符串或整數(shù)發(fā)送,所以......{  "name": "Joe",  "age": "42"}或者{  "name": "Joe",  "age": 42}我知道我可以用“,字符串”注釋“年齡”字段,如果它是一個(gè)我想強(qiáng)制轉(zhuǎn)換為整數(shù)的字符串,但如果該字段可以是其中之一怎么辦?
查看完整描述

2 回答

?
慕容3067478

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

查看文檔中的“json - raw Message” ,從那里開始,您可以根據(jù)需要嘗試解析它。

package main


import (

? ? "encoding/json"

? ? "fmt"

? ? "log"

? ? "strconv"

? ? "unicode/utf8"

)


type Person struct {

? ? Name string? ? ? ? ? `json:"name"`

? ? Age? json.RawMessage `json:"age"`

}


func main() {

? ? var j = []byte(`{"name": "Joe","age": "42"}`)

? ? var j2 = []byte(`{"name": "Joe","age": 42}`)

? ? stringOrInt(j)

? ? stringOrInt(j2)

}


func stringOrInt(bytes []byte) {

? ? var p Person

? ? err := json.Unmarshal(bytes, &p)

? ? if err != nil {

? ? ? ? log.Fatal(err)

? ? }


? ? if utf8.Valid(p.Age) {

? ? ? ? i, err := strconv.Atoi(string(p.Age))

? ? ? ? if err != nil {

? ? ? ? ? ? fmt.Println("got int " + strconv.Itoa(i))

? ? ? ? } else {

? ? ? ? ? ? fmt.Println("got string")

? ? ? ? }

? ? } else {

? ? ? ? fmt.Println("whoops")

? ? }

}


查看完整回答
反對(duì) 回復(fù) 2023-06-19
?
慕娘9325324

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

package main


import (

    "encoding/json"

    "fmt"

    "strconv"

)


type Person struct {

    Name string `json:"name"`

    Age  int    `json:"age"`

}


func (p *Person) UnmarshalJSON(b []byte) error {

    var objMap map[string]*json.RawMessage

    err := json.Unmarshal(b, &objMap)

    if err != nil {

        return err

    }


    var name string

    err = json.Unmarshal(*objMap["name"], &name)

    if err != nil {

        return err

    }


    var ageInt int

    err = json.Unmarshal(*objMap["age"], &ageInt)

    if err != nil {

        // age  is string

        var ageString string

        err = json.Unmarshal(*objMap["age"], &ageString)

        if err != nil {

            return err

        }

        aI, err := strconv.Atoi(ageString)

        if err != nil {

            return err

        }

        p.Age = aI


    } else {

        p.Age = ageInt

    }


    p.Name = name


    fmt.Printf("%+v", *p)


    return nil

}


func main() {

    p := `{"name": "John", "age": "10"}`

    //  p := `{"name": "John", "age": 10}`



    newP := Person{}

    err := newP.UnmarshalJSON([]byte(p))

    if err != nil {

        fmt.Printf("Error %+v", err)

    }


}

https://play.golang.org/p/AK8H_wdNqmt

你可以嘗試這樣的事情。嘗試讀取并解析 Into int,如果無(wú)法檢查字符串值,則將其解析為 int,然后將 int 值分配給 person struct


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

添加回答

舉報(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)