JSON "" shouldn't unmarshal to a null null.String.
That's what the zero package is for. This was a "feature", but inconsistent with the rest of the null package.
This commit is contained in:
parent
4ac4f00378
commit
a9db3ac26f
3 changed files with 8 additions and 6 deletions
|
@ -1,5 +1,5 @@
|
|||
## null [![GoDoc](https://godoc.org/github.com/guregu/null?status.svg)](https://godoc.org/github.com/guregu/null) [![Coverage](http://gocover.io/_badge/github.com/guregu/null)](http://gocover.io/github.com/guregu/null)
|
||||
`import "gopkg.in/guregu/null.v2"`
|
||||
`import "gopkg.in/guregu/null.v3"`
|
||||
|
||||
null is a library with reasonable options for dealing with nullable SQL and JSON values
|
||||
|
||||
|
@ -13,7 +13,7 @@ All types implement `sql.Scanner` and `driver.Valuer`, so you can use this libra
|
|||
|
||||
### null package
|
||||
|
||||
`import "gopkg.in/guregu/null.v2"`
|
||||
`import "gopkg.in/guregu/null.v3"`
|
||||
|
||||
#### null.String
|
||||
Nullable string.
|
||||
|
@ -41,7 +41,7 @@ Marshals to JSON null if SQL source data is null. Uses `time.Time`'s marshaler.
|
|||
|
||||
### zero package
|
||||
|
||||
`import "gopkg.in/guregu/null.v2/zero"`
|
||||
`import "gopkg.in/guregu/null.v3/zero"`
|
||||
|
||||
#### zero.String
|
||||
Nullable int64.
|
||||
|
|
|
@ -41,7 +41,7 @@ func NewString(s string, valid bool) String {
|
|||
}
|
||||
|
||||
// UnmarshalJSON implements json.Unmarshaler.
|
||||
// It supports string and null input. Blank string input produces a null String.
|
||||
// It supports string and null input. Blank string input does not produce a null String.
|
||||
// It also supports unmarshalling a sql.NullString.
|
||||
func (s *String) UnmarshalJSON(data []byte) error {
|
||||
var err error
|
||||
|
@ -60,7 +60,7 @@ func (s *String) UnmarshalJSON(data []byte) error {
|
|||
default:
|
||||
err = fmt.Errorf("json: cannot unmarshal %v into Go value of type null.String", reflect.TypeOf(v).Name())
|
||||
}
|
||||
s.Valid = (err == nil) && (s.String != "")
|
||||
s.Valid = err == nil
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
|
@ -52,7 +52,9 @@ func TestUnmarshalString(t *testing.T) {
|
|||
var blank String
|
||||
err = json.Unmarshal(blankStringJSON, &blank)
|
||||
maybePanic(err)
|
||||
assertNullStr(t, blank, "blank string json")
|
||||
if !blank.Valid {
|
||||
t.Error("blank string should be valid")
|
||||
}
|
||||
|
||||
var null String
|
||||
err = json.Unmarshal(nullJSON, &null)
|
||||
|
|
Loading…
Reference in a new issue