Re: code review 4709044: json: add omitzero struct tag option (issue4709044)

49 views
Skip to first unread message

brad...@golang.org

unread,
Jul 13, 2011, 9:06:15 PM7/13/11
to r...@golang.org, dsym...@golang.org, r...@google.com, golan...@googlegroups.com, re...@codereview.appspotmail.com

brad...@golang.org

unread,
Jul 13, 2011, 9:11:08 PM7/13/11
to r...@golang.org, dsym...@golang.org, r...@google.com, golan...@googlegroups.com, re...@codereview.appspotmail.com

David Symonds

unread,
Jul 13, 2011, 9:11:20 PM7/13/11
to brad...@golang.org, r...@golang.org, dsym...@golang.org, r...@google.com, golan...@googlegroups.com, re...@codereview.appspotmail.com
I'm personally much happier with that.

r...@golang.org

unread,
Jul 13, 2011, 9:19:53 PM7/13/11
to brad...@golang.org, dsym...@golang.org, r...@google.com, golan...@googlegroups.com, re...@codereview.appspotmail.com
looks pretty good


http://codereview.appspot.com/4709044/diff/11002/src/pkg/json/encode.go
File src/pkg/json/encode.go (right):

http://codereview.appspot.com/4709044/diff/11002/src/pkg/json/encode.go#newcode41
src/pkg/json/encode.go:41: // becomes a member of the object unless the
field's "omitzero" option
Can we call this omitempty?
It's not really zero (you don't check for zero structs for example).
Let's use the same definition exp/template just committed
(godoc exp/template |grep -C 5 empty, look in code for isTruth)

http://codereview.appspot.com/4709044/diff/11002/src/pkg/json/encode.go#newcode275
src/pkg/json/encode.go:275: tag, omitZero := "", false
s/""/f.Name/

http://codereview.appspot.com/4709044/diff/11002/src/pkg/json/encode.go#newcode278
src/pkg/json/encode.go:278: tag = ss[0]
if isValidTag(ss[0]) { tag = ss[0] }

might as well put the logic with the parser

http://codereview.appspot.com/4709044/diff/11002/src/pkg/json/encode.go#newcode294
src/pkg/json/encode.go:294: if tag != "" && isValidTag(tag) {
e.string(tag)

http://codereview.appspot.com/4709044/

Brad Fitzpatrick

unread,
Jul 13, 2011, 9:32:22 PM7/13/11
to brad...@golang.org, r...@golang.org, dsym...@golang.org, r...@google.com, golan...@googlegroups.com, re...@codereview.appspotmail.com
omitempty makes it sounds like it's only for strings and lists.

b := 0  // empty?

But if that's the wording we use elsewhere, I won't fight it.

r...@golang.org

unread,
Jul 13, 2011, 9:33:41 PM7/13/11
to brad...@golang.org, r...@golang.org, dsym...@golang.org, r...@google.com, golan...@googlegroups.com, re...@codereview.appspotmail.com

brad...@golang.org

unread,
Jul 14, 2011, 2:35:07 PM7/14/11
to r...@golang.org, dsym...@golang.org, r...@google.com, r...@golang.org, golan...@googlegroups.com, re...@codereview.appspotmail.com

r...@golang.org

unread,
Jul 14, 2011, 2:38:30 PM7/14/11
to brad...@golang.org, dsym...@golang.org, r...@google.com, r...@golang.org, golan...@googlegroups.com, re...@codereview.appspotmail.com
LGTM

http://codereview.appspot.com/4709044/diff/14001/src/pkg/json/encode.go
File src/pkg/json/encode.go (right):

http://codereview.appspot.com/4709044/diff/14001/src/pkg/json/encode.go#newcode42
src/pkg/json/encode.go:42: // specified and it has an empty or zero
value. The object's default key
unless the field is empty and its tag specifies the "omitempty" option.
The empty values are false, 0, any nil pointer or interface value,
and any array, slice, map, or string of length zero.

http://codereview.appspot.com/4709044/

brad...@golang.org

unread,
Jul 14, 2011, 2:54:58 PM7/14/11
to brad...@golang.org, r...@golang.org, dsym...@golang.org, r...@google.com, r...@golang.org, golan...@googlegroups.com, re...@codereview.appspotmail.com
*** Submitted as
http://code.google.com/p/go/source/detail?r=fe1828189f20 ***

json: add omitempty struct tag option

Fixes issue 2032

R=rsc, dsymonds, r, r
CC=golang-dev
http://codereview.appspot.com/4709044


http://codereview.appspot.com/4709044/

Reply all
Reply to author
Forward
0 new messages