猿问

我写了其余的 api 但 body 在 golang 中返回 nil 。

func InsertApData(w http.ResponseWriter, r *http.Request) {


    decoder := json.NewDecoder(r.Body)

    fmt.Printf("Request Body : ", decoder)

    var apdata models.ApData

    err := decoder.Decode(&apdata)

    check(b.E(err))

    _, err2 := stmt.InsertApData.Exec(apdata.Mac, apdata.RssiMax, apdata.RssiMin, apdata.LocDefId)

    check(b.E(err2))

}

和 db 的数据类型


type ApData struct {

    ID       int    `db:"id"`

    Mac      string `db:"mac"`

    RssiMax  uint64 `db:"rssi_max"`

    RssiMin  uint16 `db:"rssi_min"`

    LocDefId uint64 `db:"loc_def_id"`

}

为什么要回来


请求正文:%!(EXTRA *json.Decoder=&{0xc820012b00 [] {[] 0 { false [] false 0 0} { false [] false 0 0} false} 0 { false [] false 0 0} 0 [ ]})


还有 json :


{

"mac":"01:0a:95:9d:68:20",

"rssi_max":-73.50,

"rssi_min":-50.02,

"loc_def_id":1

}


料青山看我应如是
浏览 138回答 1
1回答

MYYA

如果您检查 的源代码json.Decoder,...type Decoder struct {    r     io.Reader    buf   []byte    d     decodeState    scanp int // start of unread data in buf    scan  scanner    err   error    tokenState int    tokenStack []int}func NewDecoder(r io.Reader) *Decoder {    return &Decoder{r: r}}...您可以看到NewDecoder仅设置r字段,这就是您在fmt.Printf.在您执行之前err := decoder.Decode(&apdata),您的结构不会被填充。您在输出中看到的是解码器的内容,而不是正文或您的结构。如果在运行后打印结构err := decoder.Decode(&apdata),它包含正确的数据:package mainimport (    "fmt"    "encoding/json"    "strings")func main() {    input := `{        "mac":"01:0a:95:9d:68:20",        "rssi_max":-73.50,        "rssi_min":-50.02,        "loc_def_id":1    }`    decoder := json.NewDecoder(strings.NewReader(input))    var apdata struct {            ID       int    `db:"id"`            Mac      string `json:"mac" db:"mac"`            RssiMax  uint64 `json:"rssi_max" db:"rssi_max"`            RssiMin  uint16 `json:"rssi_min" db:"rssi_min"`            LocDefId uint64 `json:"loc_def_id" db:"loc_def_id"`    }    _ = decoder.Decode(&apdata)    fmt.Printf("appdata : %+v\n", apdata)}输出:appdata : {ID:0 Mac:01:0a:95:9d:68:20 RssiMax:0 RssiMin:0 LocDefId:1}的RssiMax和RssiMin是零,因为他们接受负值无符号整数。
随时随地看视频慕课网APP

相关分类

Go
我要回答