1 回答

TA貢獻2036條經驗 獲得超8個贊
是的,這是因為以下解組規則:
要將 JSON 解組為指針,Unmarshal 首先處理 JSON 為 JSON 文字 null 的情況。在這種情況下,Unmarshal 將指針設置為 nil。否則,Unmarshal 將 JSON 解組為指針指向的值。
我建議做的是添加一個Set
字段,該字段在 UnmarshalJSON 被觸發時更改為 true(如果有任何值,則保證被觸發),然后將 更改*NullString
為簡單的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 關注
- 148 瀏覽
添加回答
舉報