在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  PHP  GO/ golang json.unmarshal 只解析非空

golang json.unmarshal 只解析非空

restful的情況下,需要PUT更新一個資源
但是PUT操作僅更新一個字段,如下:

{
"userid":1,
"username":"admin",
"userpass":"xxxx"
}

我僅僅想要更新username,
但是put("/api/users/1")
需要PUT整個

{
"userid":1,
"username":"admin",
"userpass":"xxxx"
}

不然解析之后,字段全部被覆蓋
json.Unmarshal(c.Ctx.Input.RequestBody, &v)
現(xiàn)在想要是不解析空字段,這樣就不會覆蓋&v

回答
編輯回答
遲月

定義一個struct

type Param struct {
    UserId int  `json:"userid"`
    Username string `json:"username,omitempty"`
    Userpass string `json:"userpass,omitempty"`
}

var v Param
json.Unmarshal(c.Ctx.Input.RequestBody, &v)
2018年6月22日 03:41
編輯回答
疚幼
import (
    "encoding/json"
    "fmt"
)
    
func main() { 
    fmt.Println("vim-go")
    buf, _ := json.Marshal(&struct {
        EmptyString     string
        OmitEmptyString string `json:"OmitEmptyString,omitempty"` 
    }{
        OmitEmptyString: "",
        EmptyString:     "",
    })
    
    fmt.Println("output:%s\n", string(buf))

然而,我更建議這樣寫

http.Put(struct {
    userid int
    username string
})

如果用原有結構put,那么當不小心傳入一個非空字符串時,就會更新,這是個坑

2017年5月14日 16:34
編輯回答
逗婦惱
type User struct {
    Userid   *int
    Username *string
    Userpass *string
}
2017年3月13日 09:07