From a9bdf0aaad0010fd7ad5002361c78c2be98ac4e7 Mon Sep 17 00:00:00 2001 From: Andrew Gerrand Date: Wed, 12 Jan 2011 11:59:33 +1100 Subject: json: do not Marshal unexported struct fields R=r, cw, niemeyer, rsc CC=golang-dev http://codereview.appspot.com/3952041 --- src/pkg/json/decode_test.go | 2 ++ src/pkg/json/encode.go | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pkg/json/decode_test.go b/src/pkg/json/decode_test.go index 2a18a6226..68cdea051 100644 --- a/src/pkg/json/decode_test.go +++ b/src/pkg/json/decode_test.go @@ -270,6 +270,8 @@ type All struct { Interface interface{} PInterface *interface{} + + unexported int } type Small struct { diff --git a/src/pkg/json/encode.go b/src/pkg/json/encode.go index e043a317e..759b49dbe 100644 --- a/src/pkg/json/encode.go +++ b/src/pkg/json/encode.go @@ -37,6 +37,7 @@ import ( // a member of the object. By default the object's key name is the // struct field name converted to lower case. If the struct field // has a tag, that tag will be used as the name instead. +// Only exported fields will be encoded. // // Map values encode as JSON objects. // The map's key type must be string; the object keys are used directly @@ -219,11 +220,17 @@ func (e *encodeState) reflectValue(v reflect.Value) { e.WriteByte('{') t := v.Type().(*reflect.StructType) n := v.NumField() + first := true for i := 0; i < n; i++ { - if i > 0 { + f := t.Field(i) + if f.PkgPath != "" { + continue + } + if first { + first = false + } else { e.WriteByte(',') } - f := t.Field(i) if f.Tag != "" { e.string(f.Tag) } else { -- cgit v1.2.1