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

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

JSON 整數(shù)在應(yīng)該是值時(shí)返回 0

JSON 整數(shù)在應(yīng)該是值時(shí)返回 0

Go
斯蒂芬大帝 2023-07-31 16:58:36
我有以下 JSON 文件并嘗試解析它。{"coord":{"lon":-121.31,"lat":38.7},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01d"}],"base":"stations","main":{"temp":73.26,"pressure":1018,"humidity":17,"temp_min":68,"temp_max":77},預(yù)期輸出為:當(dāng)前溫度:73今日最低點(diǎn):68今日最高點(diǎn):77當(dāng)前濕度:17%但它反而返回:當(dāng)前溫度:0今天的最低價(jià):0今天的最高價(jià):0當(dāng)前濕度:0%這是我試圖用來獲得所需回報(bào)的代碼:package mainimport (    "encoding/json"    "fmt"    "io/ioutil"    "os"    "strconv")type Daily struct {    Currenttemp int `json:"temp"`    Mintemp     int `json:"temp_min"`    Maxtemp     int `json:"temp_max"`    Humidity    int `json:"humidity"`}func main() {    jsonFile, err := os.Open("jsontest1.json")    if err != nil {        fmt.Println(err)    }    fmt.Println("Successfully Opened jsontest1.json")    defer jsonFile.Close()    byteValue, _ := ioutil.ReadAll(jsonFile)    var daily Daily    json.Unmarshal(byteValue, &daily)    fmt.Println("Current Temperature:"+strconv.Itoa(daily.Currenttemp))    fmt.Println("Today's Low:"+strconv.Itoa(daily.Mintemp))    fmt.Println("Today's High:"+strconv.Itoa(daily.Maxtemp))    fmt.Println("Current Humidity:"+strconv.Itoa(daily.Humidity)+"%")}我缺少什么?
查看完整描述

1 回答

?
侃侃無極

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

首先,您的示例 JSON 輸入格式錯(cuò)誤:它},以}}. 這會(huì)導(dǎo)致json.Unmarshal返回錯(cuò)誤:


unexpected EOF

解決這個(gè)問題會(huì)導(dǎo)致更多問題,其中許多問題人們已經(jīng)在評(píng)論中指出。例如,您的輸入與您的 不具有相同的結(jié)構(gòu)struct,并且 JSON 數(shù)字解碼為float64,而不是int。其中一個(gè)值(帶有鍵的值"temp")是73.26,它不是整數(shù)。


我有點(diǎn)不喜歡悄悄地忽略未知字段,所以我喜歡使用json.Decoder不允許未知字段的 a 。這有助于確保您不會(huì)因使用錯(cuò)誤的標(biāo)簽或錯(cuò)誤級(jí)別的標(biāo)簽而搞亂數(shù)據(jù)結(jié)構(gòu),因?yàn)楫?dāng)您這樣做時(shí),您只會(huì)將所有缺失的字段設(shè)置為零。所以我喜歡添加一個(gè)“忽略”解碼器來顯式忽略字段:


type ignored [0]byte

func (i *ignored) UnmarshalJSON([]byte) error {

    return nil

}

然后,您可以聲明類型字段ignored,但仍然給它們 json 標(biāo)簽(盡管默認(rèn)匹配字段名稱往往就足夠了):


type overall struct {

    Coord   ignored

    Weather ignored

    Base    ignored

    Main    Daily

}

如果您確實(shí)想直接解組為整數(shù)類型,則需要再次花哨,就像我在示例中所做的那樣。直接解組可能更明智float64。如果您這樣做(使用float64而不添加特殊類型只是為了忽略某些字段),您可以放棄使用json.NewDecoder.


您可以變得更奇特,并使用指針來判斷您的字段是否已填寫,但我在示例中沒有這樣做。我剪掉了文件讀取(以及對(duì)讀取調(diào)用缺乏錯(cuò)誤檢查)并使用硬編碼輸入數(shù)據(jù)。解碼確實(shí)有效的最終版本位于Go Playground 上。


查看完整回答
反對(duì) 回復(fù) 2023-07-31
  • 1 回答
  • 0 關(guān)注
  • 183 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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