鍍金池/ 問(wèn)答/Java  PHP  GO/ golang json.unmarshal 只解析非空

golang json.unmarshal 只解析非空

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

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

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

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

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

回答
編輯回答
遲月

定義一個(gè)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
})

如果用原有結(jié)構(gòu)put,那么當(dāng)不小心傳入一個(gè)非空字符串時(shí),就會(huì)更新,這是個(gè)坑

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