亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

在 Golang JSON POST 請求中編組為非字符串類型

在 Golang JSON POST 請求中編組為非字符串類型

Go
呼啦一陣風 2021-12-20 10:14:51
我在 Golang 中處理類型時遇到了一些麻煩。我正在制作一個 POST 路由器。請考慮以下事項struct:type DataBlob struct {    Timestamp string    Metric_Id int `json:"id,string,omitempty"`    Value float32 `json:"id,string,omitempty"`    Stderr float32 `json:"id,string,omitempty"`}這是我使用json.Unmarshal()解碼流的POST 路由器:func Post(w http.ResponseWriter, req * http.Request) {    body, err := ioutil.ReadAll(req.Body)    if err != nil {        panic()    }    var t DataBlob    err = json.Unmarshal(body, &t)    if err != nil {        panic()    }    fmt.Printf("%s\n", t.Timestamp)    fmt.Printf("%d\n", int(t.Metric_Id))    fmt.Printf("%f\n", t.Value)    fmt.Printf("%f\n", t.Stderr)}似乎無論我在 POST 請求中設置什么值:{    "timestamp": "2011-05-16 15:36:38",    "metric_id": "28",    "value": "4.5",    "stderr": "8.5"}所有非字符串值分別打印為0或0.000000。如果我嘗試在事后輸入 convert inline 也沒關系,就像我t.Metric_Id在示例中所做的那樣。如果我編輯結構以僅處理string類型,則值會正確打印。我還使用以下方法編寫了一個 POST 路由器版本json.NewDecoder():func Post(w http.ResponseWriter, req * http.Request) {    decoder := json.NewDecoder(req.Body)    var t DataBlob    err := decoder.Decode(&t)    if err != nil {        panic()    }    fmt.Printf("%s\n", t.Timestamp)    fmt.Printf("%d\n", t.Metric_Id)    fmt.Printf("%f\n", t.Value)    fmt.Printf("%f\n", t.Stderr)}
查看完整描述

1 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

您需要更改 Datablob 值的名稱。您已經告訴 JSON 解碼器它們都被命名為“id”。您應該嘗試以下操作。另外,請查看 json.Marshal 描述以及它如何描述結構的標記以及 json 庫如何處理它們。https://golang.org/pkg/encoding/json/#Marshal


type DataBlob struct {

    Timestamp string

    Metric_Id int `json:"metric_id,string,omitempty"`

    Value float32 `json:"value,string,omitempty"`

    Stderr float32 `json:"stderr,string,omitempty"`

}


查看完整回答
反對 回復 2021-12-20
  • 1 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號