1 回答

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
是的,這是因?yàn)橐韵陆饨M規(guī)則:
要將 JSON 解組為指針,Unmarshal 首先處理 JSON 為 JSON 文字 null 的情況。在這種情況下,Unmarshal 將指針設(shè)置為 nil。否則,Unmarshal 將 JSON 解組為指針指向的值。
我建議做的是添加一個(gè)Set
字段,該字段在 UnmarshalJSON 被觸發(fā)時(shí)更改為 true(如果有任何值,則保證被觸發(fā)),然后將 更改*NullString
為簡(jiǎn)單的NullString
,如下所示:
package main
import (
? ? "database/sql"
? ? "encoding/json"
? ? "log"
)
// NullString
type NullString struct {
? ? Set bool
? ? sql.NullString
}
func (n *NullString) UnmarshalJSON(b []byte) error {
? ? n.Set = true
? ? n.Valid = string(b) != "null"
? ? e := json.Unmarshal(b, &n.String)
? ? return e
}
type Person struct {
? ? Name NullString `json:"name"`
}
func BuildUpdateSQL(jsonString string) string {
? ? p := Person{}
? ? e := json.Unmarshal([]byte(jsonString), &p)
? ? if e != nil {
? ? ? ? log.Println(e)
? ? }
? ? log.Printf("%#v", p)
? ? return ""
}
func main() {
? ? BuildUpdateSQL(`{"field_not_exist":"samantha"}`)
? ? BuildUpdateSQL(`{"name":"samantha"}`)
? ? BuildUpdateSQL(`{"name":null}`)
}
- 1 回答
- 0 關(guān)注
- 158 瀏覽
添加回答
舉報(bào)